UVa(12821),MCMF
题目链接:https://uva.onlinejudge.org/external/128/12821.pdf
比赛的时候,准备用最短路来做,存两张图,做两次最短路,本来还觉得第二张图的设计很好的,很不错,结果过了好多案例,还是莫名其妙的WA了。
好吧,问题来了。
6 7
1 2 1 100
2 3 10 100
1 4 10 100
2 5 1 100
3 6 10 100
4 5 10 100
5 6 1 100
ans = 42,
最短路思路就是不对的。
完了之后,听阳哥说,直接MCMF啊,当时我就傻逼了,主要是我MCMF的题目做少了,不会想到是MCMF。
这里: 每条边的容量是1,花费是边权,然后是超级源点和汇点,容量是2,花费是0。
模板来自刘汝佳,改了Bellman-Ford,用的是SPFA.
#include <iostream> #include <stdio.h> #include <cstring> #include <vector> #include <queue> #define INF 0x3f3f3f3f using namespace std; const int maxn = 600; struct Edge {int from,to,cap,flow,cost;Edge() {}Edge(int a,int b,int c,int d,int e):from(a),to(b),cap(c),flow(d),cost(e) {} }; struct MCMF {int n,m,s,t;vector<Edge> edges;vector<int> g[maxn];int inq[maxn];int d[maxn];int p[maxn];int a[maxn];void init(int n){this->n =n;for(int i=0; i<n; i++)g[i].clear();edges.clear();}void addedge(int from,int to,int cap,int cost){Edge e1= Edge(from,to,cap,0,cost), e2= Edge(to,from,0,0,-cost);edges.push_back(e1);edges.push_back(e2);m=edges.size();g[from].push_back(m-2);g[to].push_back(m-1);}bool spfa(int s,int t, int & flow,int & cost){for(int i=0; i<n; i++)d[i]=INF;memset(inq,0,sizeof(inq));d[s]=0;inq[s]=1;p[s]=0;a[s]=INF;queue<int>q;q.push(s);while(!q.empty()){int u=q.front();q.pop();inq[u]=0;for(int i=0; i<g[u].size(); i++){Edge & e = edges[g[u][i]];if(e.cap>e.flow && d[e.to]>d[u]+e.cost){d[e.to]=d[u]+e.cost;p[e.to]=g[u][i];a[e.to]=min(a[u],e.cap-e.flow);if(!inq[e.to]){q.push(e.to);inq[e.to]=1;}}}}if(d[t]==INF)return false;flow+=a[t];cost+=a[t]*d[t];for(int u=t; u!=s; u=edges[p[u]].from){edges[p[u]].flow +=a[t];edges[p[u]^1].flow-=a[t];}return true;}int MincostMaxflow(int s,int t){int flow=0,cost =0;while(spfa(s,t,flow,cost));return cost;} } sol;int main() {freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);int n,m,cas=1;while(scanf("%d%d",&n,&m)!=EOF){int s=0,t=n+1;sol.init(n+2);while(m--){int u,v,c,ad;scanf("%d%d%d%d",&u,&v,&c,&ad);sol.addedge(u,v,1,c);sol.addedge(u,v,1,c+ad);}sol.addedge(s,1,2,0);sol.addedge(n,t,2,0);printf("Case %d: %d\n",cas++,sol.MincostMaxflow(s,t));} }
转载于:https://www.cnblogs.com/TreeDream/p/5801286.html
UVa(12821),MCMF相关推荐
- UVa 489,紫书P79,刽子手游戏
题目链接:https://uva.onlinejudge.org/external/4/489.pdf 这个题很像之前的一个拓扑排序的题目,思路类似咯. 程序模块化: 每次判断一个字母,lose,wi ...
- UVa 11624,两次BFS
题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...
- UVa 10047,独轮车
题目链接:https://uva.onlinejudge.org/external/100/10047.pdf 题目链接:http://vjudge.net/contest/132239#proble ...
- Uva(10048),最短路Floyd
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Uva 1220,Hali-Bula 的晚会
题目链接:https://uva.onlinejudge.org/external/12/1220.pdf 题意: 公司n个人,形成一个数状结构,选出最大独立集,并且看是否是唯一解. 分析: d(i) ...
- Uva 11400,照明系统设计
题目链接:https://uva.onlinejudge.org/external/114/11400.pdf 题意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要 ...
- 矩阵模板hdu5015,UVA 10655,UVA 11149
hdu5015 n是<=10的,可以想到点什么,, 构造矩阵mat[n+2][n+2] 发现mat*a是答案矩阵第1列 mat的m次方再乘a就是答案矩阵的第m列,取最下面的就行了 这板不错 #i ...
- Uva 12563,劲歌金曲,01背包
题目链接:https://uva.onlinejudge.org/external/125/12563.pdf 题意:n首歌,每首歌的长度给出,还剩 t 秒钟,由于KTV不会在一首歌没有唱完的情况下切 ...
- UVa 1339,紫书P73,词频
题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include ...
最新文章
- Gulp:插件编写入门
- Edward Gaming, the Champion 字符串,模拟(2021.11.沈阳)
- VS2013+qt-vs-addin-1.2.4安装配置
- win10 查看文件扩展名 - 教程篇
- vite新建vue3项目采坑,官网流程之路,vite+vue3+elementpuls
- 计算机视觉论文-2021-06-18
- java for android的书_JavaForAndroid07
- 使用Moq、NUnit和Shoulded进行单元测试
- 汽车租赁php参考文献,国内外汽车租赁文献综述
- 阿里云工程师用机器学习破解雾霾成因
- 生物信息数据格式:fastq格式
- nc65右键生成菜单_NC常见问题处理
- 图片传输(APP端将图片传至服务器端存储)
- java arraylist 求和_java-ArrayList中类对象属性的总和
- 创建自己的搜索引擎,利用google进行站内搜索
- 《汇编语言》第10章 call和ret指令
- ubuntu 调整cpu运行模式至高性能
- java开发实战经典(第二版)P528 14-2
- c语言指针存储的第一个字节,c语言指针详解,学霸课堂记录
- 实验六、数据挖掘之关联分析
热门文章
- 若依集成aj-captcha实现滑块验证码(单体版)
- [ExtJS 6]Grid分页工具栏无效问题解决
- php毛玻璃,CSS实现毛玻璃透明效果
- MATLAB信号处理之连续时间系统的时域分析
- php合图,php合并图片
- 将图片文件通过byte[]字节数组Base64加密后给前端显示
- css线条伸缩_CSS3弹性伸缩布局(一)——box布局
- ftp ---- 虚拟用户登录(实例配置)
- nginx ---- 静态资源部署
- dict过滤 python_从Python dict获得独特的第一次出现的更有效方法