HDU 4289 Control(拆点+最大流)
来源:互联网 发布:矩阵切换系统 编辑:程序博客网 时间:2024/05/29 16:06
请不要随便指点别人该怎么做、每个人的人生都应该自己掌握、你给不了别人一切、你也不懂别人的忧伤、
微笑不代表快乐、哭泣不一定悲伤
不努力怎么让关心你的人幸福、不努力怎么让看不起你的人绝望、
我用生命在奋斗——lx_Zz
—————————————————————————————————————————————————————————————
————————————————————————— 华丽的分割线 ————————————————————————————
—————————————————————————————————————————————————————————————
这是一道2012年成都网络赛被大家秒杀的水题
我对自己都无语了、我看到这题以为自己可以分分钟AC掉。。。不就是个赤果果的拆点么。。结果硬是调了一晚上
C++实验课就这样被这题耗掉了。。。想死的心都有了。。还好下课之前终于发现自己建图的时候傻逼的忘记反向建边了。。。给跪了
46给我再去相信的勇气、31MS1204K3268BC++2014-05-06 20:46:24效率还是不错的、下次再也不能这么逗了。。。#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; #define N 405 #define INF 0x7fffffff int n,m,k; int level[N]; struct node { int to,next; int cost; }edge[N*N]; int head[N]; int t_head[N]; int num[N]; int start,end;void init() { k=0; memset(head,-1,sizeof(head)); } int bfs(int s,int t)//对顶点进行标号、找出层次图 { memset(level,0,sizeof(level)); queue<int>q; q.push(s); level[s]=1; while(!q.empty()) { int now=q.front(); q.pop(); int i; for( i=head[now];i!=-1;i=edge[i].next) { int y=edge[i].to; if(!level[y]&&edge[i].cost>0) { level[y]=level[now]+1; q.push(y); } } } return level[t]!=0;//汇点是否在层次图中 } int minn(int x,int y){ if(x<y)return x; return y;}int dfs(int s,int cp)//在层次图中寻找增广路进行增广 { int flow=0,temp; int t; if(s==end||cp==0)return cp; for(;t_head[s]+1;t_head[s]=edge[t_head[s]].next) { int y=edge[t_head[s]].to; if(level[s]+1==level[y]) { temp=dfs(y,minn(cp,edge[t_head[s]].cost)); if(temp>0) { edge[t_head[s]].cost-=temp; edge[t_head[s]^1].cost+=temp; flow+=temp; cp-=temp; if(cp==0)break; } } } return flow; } int dinic() { int ans=0,flow=0; int i; while(bfs(start,end))//汇点不在层次图中、算法终止 { for( i=0;i<=end;i++) t_head[i]=head[i]; ans+=dfs(start,INF); } return ans; } void add(int x,int y,int val) { edge[k].to=y; edge[k].cost=val; edge[k].next=head[x]; head[x]=k++; edge[k].to=x; edge[k].cost=0; edge[k].next=head[y]; head[y]=k++; } int main(){ //freopen("C:\\Users\\终将我要华丽的逆袭\\Desktop\\lx_Zz_in.txt","r",stdin); //freopen("C:\\Users\\终将我要华丽的逆袭\\Desktop\\lx_Zz_out.txt","w",stdout); while(scanf("%d%d",&n,&m)!=EOF) { init(); int x,y; start=0;end=200+n+1; scanf("%d%d",&x,&y); int i; add(start,x,INF); add(y+200,end,INF); for( i=1;i<=n;i++) { scanf("%d",&num[i]); } for( i=1;i<=n;i++) { add(i,i+200,num[i]); add(i+200,i,num[i]); } for( i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); add(a+200,b,INF); add(b+200,a,INF); } printf("%d\n",dinic()); } return 0;}
- HDU 4289 Control(拆点,最大流)
- HDU 4289 Control(拆点+最大流)
- hdu 4289 Control 【图论-网络流-最大流-拆点】
- HDU-4289-Control(最大流+拆点)
- HDU 4289 Control 最小割最大流 拆点
- HDU 4289 Control(最大流+拆点)
- HDU 4289 Control(最大流+拆点)
- hdu 4289 Control【最大流Dinic----拆点+最大流最小割定理】
- hdu 4289 Control(网络流 最大流+拆点)(模板)
- [HDU 4289]Control[网络流][拆点]
- HDU 4289 Control (拆点+网络流)
- 最大流:HDU-4289(CONTROL)
- 【HDU】4289 Control 最大流
- hdu 4289 Control (最大流)
- HDU 4289 Control 最大流
- hdu 4289 Control (最大流)
- hdu 4289 Control (最大流)
- 最大流最小割-HDU-4289-Control
- Linux_touch命令
- 第二十四题 求取树的深度
- 猫是影响我效率的最大因素!
- 支持向量机理解和总结
- 虚拟机迁移过程中网络状况测试的测试程序
- HDU 4289 Control(拆点+最大流)
- java基本程序流程控制
- 安装
- 自己写的一个将指定目录下的文本文件集合成单独的一个大文本文件工具
- vim : 删除不包含某字符的行
- OCP-1Z0-051 第78题 ROUND和TRUNC函数
- Linus关于创新的观点
- 高性能服务器开发
- Bloom Filter