题意:

有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市。

每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai

而且每条路最多运送Ci个货物,求最小费用。

分析:

拆边,每条边拆成费用为a, 3a, 5a的边,这样就能保证每条边的费用和流量的平方成正比。

因为最多运送K个货物,所以增加一个源点和城市1连一条容量为K费用为0的边。

跑一边最小费用最大流,如果满流才有解。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std; const int maxn = + ;
const int INF = 0x3f3f3f3f; struct Edge
{
int from, to, cap, flow, cost;
Edge(int u, int v, int cap, int flow, int cost):from(u), to(v), cap(cap), flow(flow), cost(cost) {}
}; int n, s, t, m, k;
vector<Edge> edges;
vector<int> G[maxn]; void init(int n)
{
for(int i = ; i < n; i++) G[i].clear();
edges.clear();
} void AddEdge(int u, int v, int cap, int cost)
{
edges.push_back(Edge(u, v, cap, , cost));
edges.push_back(Edge(v, u, , , -cost));
int m = edges.size();
G[u].push_back(m - );
G[v].push_back(m - );
} bool inq[maxn];
int p[maxn], d[maxn], a[maxn]; bool SPFA()
{
memset(d, 0x3f, sizeof(d));
d[s] = ;
queue<int> Q;
Q.push(s);
memset(inq, false, sizeof(inq));
inq[s] = true;
memset(p, -, sizeof(p));
a[s] = INF; while(!Q.empty())
{
int u = Q.front(); Q.pop(); inq[u] = false;
for(int i = ; i < G[u].size(); i++)
{
Edge& e = edges[G[u][i]];
int v = e.to;
if(e.cap > e.flow && d[u] + e.cost < d[v])
{
d[v] = d[u] + e.cost;
p[v] = G[u][i];
a[v] = min(a[u], e.cap - e.flow);
if(!inq[v]) { inq[v] = true; Q.push(v); }
}
}
} return d[t] < INF;
} int Maxf; int Mincost()
{
int cost = ;
Maxf = ;
while(SPFA())
{
Maxf += a[t];
cost += a[t] * d[t];
int u = t;
while(u != s)
{
edges[p[u]].flow += a[t];
edges[p[u]^].flow -= a[t];
u = edges[p[u]].from;
}
}
return cost;
} int main()
{
while(scanf("%d%d%d", &n, &m, &k) == )
{
init(n + ); s = , t = n;
AddEdge(s, , k, ); while(m--)
{
int u, v, a, C;
scanf("%d%d%d%d", &u, &v, &a, &C);
for(int i = ; i < C; i++)
AddEdge(u, v, , a * (i * + ));
} int cost = Mincost();
if(Maxf < k) puts("-1");
else printf("%d\n", cost);
} return ;
}

代码君

HDU 3667 费用流 拆边 Transportation的更多相关文章

  1. HDU 3667 费用流(拆边)

    题意:有n个城市(1~n),m条有向边:有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用. 思路:c ...

  2. Going Home HDU - 1533 费用流

    http://acm.hdu.edu.cn/showproblem.php?pid=1533 给一个网格图,每两个点之间的匹配花费为其曼哈顿距离,问给每个的"$m$"匹配到一个&q ...

  3. hdu 5045 费用流

    滚动建图,最大费用流(每次仅仅有就10个点的二分图).复杂度,m/n*(n^2)(n<=10),今年网络赛唯一网络流题,被队友状压DP秒了....难道网络流要逐渐退出历史舞台???.... #i ...

  4. HDU 3376 费用流 Matrix Again

    题意: 给出一个n × n的矩阵,每个格子中有一个数字代表权值,找出从左上角出发到右下角的两条不相交的路径(起点和终点除外),使得两条路径权值之和最大. 分析: 如果n比较小的话是可以DP的,但是现在 ...

  5. hdu 2686 费用流 / 双线程DP

    题意:给一个方阵,求从左上角出到右下角(并返回到起点),经过每个点一次不重复,求最大获益(走到某处获得改点数值),下来时每次只能向右或向下,反之向上或向左. 俩种解法: 1  费用流法:思路转化:从左 ...

  6. hdu 4406 费用流

    这题问题就是当前时刻究竟选择哪门课程,易知选择是和分数有关的,而且是一个变化的权值,所以能够用拆点的方式,把从基础分到100分都拆成点.但若这样拆点的话,跑费用流时就必须保证顺序.这样就麻烦了..观察 ...

  7. UVA1486 Transportation 费用流 拆边。

    #include <iostream> #include <cstdio> #include <cmath> #include <queue> #inc ...

  8. hdu 1853 (费用流 拆点)

    // 给定一个有向图,必须用若干个环来覆盖整个图,要求这些覆盖的环的权值最小. 思路:原图每个点 u 拆为 u 和 u' ,从源点引容量为 1 费用为 0 的边到 u ,从 u' 引相同性质的边到汇点 ...

  9. HDU 5644 (费用流)

    Problem King's Pilots (HDU 5644) 题目大意 举办一次持续n天的飞行表演,第i天需要Pi个飞行员.共有m种休假计划,每个飞行员表演1次后,需要休假Si天,并提供Ti报酬来 ...

随机推荐

  1. 升级到spring security5遇到的坑-密码存储格式

    遇到的问题 将spring security oauth2(包括spring security)升级到最新,代码没有改动,运行项目没有报错,但是页面登陆时报错:There is no Password ...

  2. SyntaxError: Use of const in strict mode.

    具体报错console c:\Users\Administrator\WebstormProjects\blogtest\node_modules\connect-mongo\src\index.js ...

  3. 浅谈C#解析网页

    最近做了一个项目,要求获取各大主流网页上的关键信息,本人以前了解过网页爬虫的知识,所以想到了网页爬虫了实现功能 第一次尝试: 采用webclient获取远程网页的内容,然后采用正则表达式进行过滤 但, ...

  4. P4868 天天和不可描述

    http://www.tyvj.cn/p/4868 思路: 本想用站做的,但发现要用很多站同时做,还要来回倒. 我怕超时,所以换了种做法. 因为每遇到一次括号都要把输出方向改变,而括号是成对存在的,所 ...

  5. 1008 选数 2002年NOIP全国联赛普及组

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  6. Kendo MVVM 数据绑定(三) Click

    Kendo MVVM 数据绑定(三) Click Click 绑定可以把由 ViewModel 定义的方法不绑定到目标 DOM 的 click 事件.当点击目标 DOM 元素时触发 ViewModel ...

  7. ios 各种锁的使用性能比较

    iOS开发中常用的锁有如下几种 来比较一下遇到加锁的情况: 1. @synchronized 关键字加锁 2. NSLock 对象锁 3. NSCondition  4. NSConditionLoc ...

  8. Elasticsearch-分片原理1

    Elasticsearch版本:6.0 Elasticsearch基于Lucene,采用倒排索引写入磁盘,Lucene引入了按段搜索的概念,来动态更新索引. 一个Lucene索引包含一个提交点和三个短 ...

  9. Beginning Python Chapter 3 Notes

    变量(variable)是储存数据的实体,在Python中也被称为"名称"(name). 1.Python"名称"基本命名法则 1.1) "名称&qu ...

  10. websocket+订阅发布者模式模拟实现股票价格实时刷新

    1.新建文件夹 2.文件夹中新建index.html 和 index.js index.html <!DOCTYPE html> <html lang="en"& ...