nkoj p3000 【nodgd造水题】嵩嵩

嵩嵩需要通过公路将货物从美国运送到何老板家,路线中不能有重复道路。问题转化为求解最小路径总长度,保证T辆卡车各走不同道路。这是一个费用流问题,可以通过模板解决。样例输入和输出展示了具体操作。
摘要由CSDN通过智能技术生成

nkoj p3000 【nodgd造水题】嵩嵩

问题描述

受何老板之托,嵩嵩在美国为何老板采购的若干吨货物。这批货物已通过水路运送到了我国某沿海城市,现在需要通过公路将这些货物运送到何老板家。嵩嵩的地图上有N(2 <= N <= 200) 座城市,编号1到N,嵩嵩在1号城市,何老板的家在N号城市。这N座城市间有P(1 <= P <= 40,000) 条双向通行的道路相连,每条道路长度不超过1,000,000。两座城市间可能有多条道路相连。
嵩嵩雇了T(1 <= T <= 200)辆卡车运送这批货物。为了避免被人发现或引起别人的注意,嵩嵩安排这T辆车选择不同的道路行驶,也就是同一条道路不会被走两次。
请帮助嵩嵩安排这T辆车的线路,使得走过的总长度尽量短。
嵩嵩向你保证在不走重复道路的情况下,一定能够把T车货物运到目的地。
注意:题目中描述的“道路”相当于图论中的“边”。
注:题目改编自NKOJ1605。其实是nodgd做1605的时候一开始读错题了,但是既然代码都写好了,总不能浪费了吧,所以就有了这道题!

输入格式

第一行包括三个空格间隔的整数N,P,T。
接下来P行,每行有三个空格间隔的整数A,B,C。表示城市A、B间有条长度为C的道路。

输出格式

一整数,表示经过的道路总长度的最小值。

样例输入

7 9 2
1 2 2
2 3 5
3 7 5
1 4 1
4 3 1
4 5 7
5 7 1
1 6 3
6 7 3

样例输出

13

一点小想法

费用流模板题,把 1 看成原点 n 看成汇点,每条路的费用就是它的长度,每条路的容量为 1
只需要注意一点就是只有 t 辆货车,所以当最大流达到 t 时退出找增广路,输出此时的最小费用。

代码

#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int Max = (40000 + 5) << 3;
int Last[Max];
struct Eg {
   
    int Next, Child, Cost, Cap;
} egs[Max];
int n, p, t;
void addegs(int num, int fr, int to, int c, int v) {
   
    egs[num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值