poj PIGS 网络流EK
2015-07-26 10:29
537 查看
这尼玛都能过,太高兴了,意料之外
图建得惨不忍赌啊
图建得惨不忍赌啊
#include<iostream> #include<stack> #include<cstring> #include<queue> using namespace std; const int inf = 0x7f7f7f7f; int a[1100]; int p[405][405]; int pre[405]; int maxflow=0; queue<int>q; int sp,sf; int vis[1100]; int flow[405]; int tmp[405]; int mm; void bfs() { while(q.size()) q.pop(); q.push(sp); memset(vis,0,sizeof(vis)); memset(pre,-1,sizeof(pre)); int u,v; vis[sp]=1; flow[sp]=inf; while(q.size()&&vis[sf]==0) { u=q.front(); q.pop(); for(v=0;v<=sf;v++) { if(!vis[v]&&p[u][v]) { flow[v]=min(flow[u],p[u][v]); vis[v]=1; pre[v]=u; q.push(v); } } } return ; } void max_flow() { while(1) { bfs(); if(vis[sf]==0) { break; } int s=sf; while(pre[s]!=-1) { p[pre[s]][s]-=flow[sf]; p[s][pre[s]]+=flow[sf]; s=pre[s]; } maxflow+=flow[sf]; } return ; } stack<int>temp; int main() { int m,n; cin>>m>>n; int i,j; memset(vis,0,sizeof(vis)); memset(p,0,sizeof(p)); for(i=1;i<=m;i++) cin>>a[i]; int x,y; sp=0; sf=400; int sum1,sum2; mm=1; int k; for(i=1;i<=n;i++) { cin>>x; for(j=1;j<=x;j++) { cin>>tmp[j]; } cin>>y; k=0; sum2=0; for(j=1;j<=x;j++) { if(vis[tmp[j]]) { k=vis[tmp[j]]; temp.push(k); //一开始没有压栈保存,以为只保存一个就行了,然后WA. } else { sum2+=a[tmp[j]]; vis[tmp[j]]=mm+1; } } if(sum2) { p[sp][mm]=inf; p[mm][mm+1]=sum2; mm++; } if(temp.size()) { while(temp.size()) { p[temp.top()][mm]=inf; temp.pop(); } } p[mm++][sf]=y; } max_flow(); cout<<maxflow<<endl; }
相关文章推荐
- web中的HTTP协议
- TCP编程,Socket通讯
- http代理
- http压缩
- http缓存
- http协议详解
- 虚拟机下centos6的网络IP配置
- HTTP学习要点(一)
- 网络科技协会暑假第一周学习计划报告
- httpclient发送不带参数post数据
- 社交网络编程API之iOS系统自带分享
- 新博客,新起点!
- linux系统CPU,内存,磁盘,网络流量监控脚本
- linux系统CPU,内存,磁盘,网络流量监控脚本
- comet基于HTTP长连接技术(java即时通信,推送技术详解)
- socket通讯原理以及tcp、ip三次握手机制分析
- 为什么有的网络资源浏览器能够直接打开,有的是点开后下载
- http_servlet
- CNN卷积神经网络学习笔记4:代码学习
- 常用的HTTP方法