POJ 1459 Power Network (dinic进阶)
2015-08-23 21:58
477 查看
题目大意:
三种类型的点,第一种类型使流量增大,第二种类型使流量减小,第三种类型不改变。问最大流量。
解题思路:
建立一个源点,一个汇点。源点和第一种类型的点连边,汇点和第二种类型的点连边,跑最大流。
三种类型的点,第一种类型使流量增大,第二种类型使流量减小,第三种类型不改变。问最大流量。
解题思路:
建立一个源点,一个汇点。源点和第一种类型的点连边,汇点和第二种类型的点连边,跑最大流。
</pre><pre name="code" class="html">#include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define INF 0x3ff using namespace std; const int N=250; int level ,head ; int n,t,s,cnt; struct node{ int p,f,next; }edge[N*N]; void add(int u,int v,int w) { edge[cnt].p=v; edge[cnt].f=w; edge[cnt].next=head[u]; head[u]=cnt++; edge[cnt].p=u; //反向边。 edge[cnt].f=0; edge[cnt].next=head[v]; head[v]=cnt++; } int bfs() { int front=0,rear=0,cur,cl; int que ; memset(level,-1,sizeof(level)); que[rear++]=s; level[s]=0; for(;front!=rear;front=(front+1)%N){ //循环列表。 cur=que[front]; cl=level[cur]; for(int i=head[cur];i!=-1;i=edge[i].next){ if(edge[i].f&&level[edge[i].p]==-1){ que[rear]=edge[i].p; level[edge[i].p]=cl+1; rear=(rear+1)%N; } } } return level[t]!=-1; } int dfs(int r,int h) { int tmp=0,cp; if(r==t) return h; for(int i=head[r];tmp<h&&i!=-1;i=edge[i].next){ if(edge[i].f&&level[r]+1==level[edge[i].p]){ cp=min(h-tmp,edge[i].f); cp=dfs(edge[i].p,cp); edge[i].f-=cp; edge[i^1].f+=cp; //异或运算,相当于i(偶数),与i+1互换,奇数i与i-1互换。2^1=3,3^1=2; tmp+=cp; } } if(!tmp) level[r]=-2; return tmp; } int dinic() { int ans,res=0; while(bfs()){ while(ans=dfs(s,INF)) res+=ans; } return res; } int main() { int np,nc,m,u,v,w; char st[10]; while(scanf("%d %d %d %d",&n,&np,&nc,&m)!=EOF){ s=n; t=n+1; cnt=0; memset(head,-1,sizeof(head)); while(m--){ scanf(" (%d,%d)%d",&u,&v,&w); //注意,前面有个空格,否则输入变为死循环。 add(u,v,w); } while(np--){ scanf(" (%d)%d",&u,&w); add(s,u,w); } while(nc--){ scanf(" (%d)%d",&u,&w); add(u,t,w); } printf("%d\n",dinic()); } return 0; }
相关文章推荐
- HDU 5407 费马小定理
- XML文档定义有几种形式?解析XML文档有哪几种方式?
- 杂项设备驱动
- 字符设备驱动
- Spring的简介
- NuGet学习笔记(2)——使用图形化界面打包自己的类库(转)
- 2015.8.23——张佳莉
- 大小端模式
- 黑马学习笔记_常用API总结(一)
- 洛谷1601 A+B Problem(高精) 解题报告
- Cocos2d-x 3.3版本及以上版本CCPointZero的改变
- 黑马程序员—学习笔记4-PrintStream
- Java技术资料
- Collection 和 Collections的区别
- __main() 和 main()
- 华为数字芯片实习面试经过
- IFS的值和简单实例
- java基础和面向对象
- c& c++笔试题
- MFC中持久化的实现