poj2135 最小费用最大流模板
2016-05-02 11:23
260 查看
点击打开链接
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<vector> using namespace std; #define V 10010 #define E 100010 #define inf 0x3f3f3f3f struct Edge{ int x,y,next,cap,cost; }edge[E]; int pre[V],dist[V],head[V],vis[V]; int cnt = 0; void init() { cnt = 0; memset(head,-1,sizeof(head)); } void addedge(int u,int v,int c,int cost) { edge[cnt].x=u;edge[cnt].y=v;edge[cnt].cost=cost; edge[cnt].cap=c;edge[cnt].next=head[u];head[u]=cnt++; edge[cnt].x=v;edge[cnt].y=u;edge[cnt].cost=-cost; edge[cnt].cap=0;edge[cnt].next=head[v];head[v]=cnt++;//注意反向边cap为0!!WA好几次... } int spfa(int start,int end) { queue<int>q; for(int i=0;i<=end+2;i++){ dist[i]=inf,vis[i]=0,pre[i]=-1; } vis[start]=1,dist[start]=0; q.push(start); while(!q.empty()) { int now=q.front(); q.pop(); int u,v; u=now; vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { if(edge[i].cap>0) { v=edge[i].y; if(dist[v]>dist[u]+edge[i].cost) { dist[v]=dist[u]+edge[i].cost; pre[v]=i;//记录前驱 if(!vis[v]) { q.push(v); vis[v]=1; } } } } } return dist[end]!=inf; } int MCMF(int begin,int end) { int ans=0,flow,flow_sum=0; while(spfa(begin,end)) { flow=inf; for(int i=pre[end];i!=-1;i=pre[edge[i].x])flow=min(flow,edge[i].cap); //cout<<flow<<endl; for(int i=pre[end];i!=-1;i=pre[edge[i].x]){ edge[i].cap-=flow; edge[i^1].cap+=flow;//i^1就变成反边了?高大上... } flow_sum+=flow; ans+=dist[end];//这题最大流只有1或0,一般化的是flow*dist[end]; } return ans; } int main() { //freopen("in.txt","r",stdin); int n,m,a,b,c; while(scanf("%d%d",&n,&m)!=EOF){ init(); addedge(0,1,2,0); addedge(n,n+1,2,0); for(int i=1;i<=m;i++){ scanf("%d%d%d",&a,&b,&c); addedge(a,b,1,c); addedge(b,a,1,c); } printf("%d\n",MCMF(0,n+1)); } return 0; }
相关文章推荐
- CentOS 7Install PrestaShop
- HDU-ACM2048
- 快速排序以及归并排序
- LeetCode 245. Shortest Word Distance III
- 测试验证replicate-ignore-table参数作用
- Haproxy启动故障:Starting proxy:cannot bind socke
- innodb_buffer_pool_size 大小建议
- Q&A: 你能不能迅速说出以下短语的英语?
- Spark-Avro学习3之使用AvroCompression存储AVRO文件
- js的setInterval函数语法
- u-boot添加一个hello命令
- 基于nginx和uWSGI在Ubuntu上部署Django
- Poj 1655 Balancing Act
- android 关于app启动时SplashActivity界面加了延时动画用户点击back键出现闪屏做的修复
- Qt中如何用QImage::Format_Indexed8表示灰度图
- HDU-ACM2047
- Gentoo记录
- hdu1069 Monkey and Banana
- XMG 静态单元格的搭建(静态表格只能用在stroyBoard中,xib中无法使用)
- MySQL索引原理