网络流(置顶)
2014-05-02 23:28
183 查看
poj1637 判断混合图是否能形成欧拉回路:网络流做奇偶性判断(inspire)
View Code
//sgu326 #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <iostream> #include <algorithm> #define LL long long #define INF 1<<30 #define maxn 510 #define maxm 91000 using namespace std; int v[maxm],next[maxm],w[maxm]; int first[maxn],d[maxn],work[maxn],q[maxn]; int e,S,T,n,m; void init(){ e = 0; memset(first,-1,sizeof(first)); } void addedge(int a,int b,int c){ v[e] = b;next[e] = first[a];w[e] = c;first[a] = e++; v[e] = a;next[e] = first[b];w[e] = 0;first[b] = e++; } int bfs(){ int rear = 0; memset(d,-1,sizeof(d)); d[S] = 0;q[rear++] = S; for(int i = 0;i < rear;i++){ for(int j = first[q[i]];j != -1;j = next[j]) if(w[j] && d[v[j]] == -1){ d[v[j]] = d[q[i]] + 1; q[rear++] = v[j]; if(v[j] == T) return 1; } } return 0; } int dfs(int cur,int a){ if(cur == T) return a; for(int &i = work[cur];i != -1;i = next[i]){ if(w[i] && d[v[i]] == d[cur] + 1) if(int t = dfs(v[i],min(a,w[i]))){ w[i] -= t;w[i^1] += t; return t; } } return 0; } int dinic(){ int ans = 0; while(bfs()){ memcpy(work,first,sizeof(first)); while(int t = dfs(S,INF)) ans += t; } return ans; } int cnt,u2[410],v2[410],r2[410]; int w2[25]; int N; int main(){ while(~scanf("%d",&N)){ for(int i=1;i<=N;i++) scanf("%d",&w2[i]); for(int i=1;i<=N;i++) { int k;scanf("%d",&k); if (i==1) w2[1]+=k; } cnt=0; for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ int k;scanf("%d",&k); if (i==1 || j==1 || k==0 || i>=j) continue; u2[cnt]=i;v2[cnt]=j;r2[cnt++]=k; } } bool isok=true; for(int i=2;i<=N;i++) if (w2[i]>w2[1]) { isok=false;break; } if (!isok){ printf("NO\n"); continue; } int sum=0; S=0;T=501; init(); //比赛:N+1--N+cnt,队伍1--N for(int i=0;i<cnt;i++){ addedge(S,N+i+1,r2[i]); sum+=r2[i]; } for(int i=2;i<=N;i++){ addedge(i,T,w2[1]-w2[i]); } for(int i=0;i<cnt;i++){ addedge(N+i+1,u2[i],r2[i]); addedge(N+i+1,v2[i],r2[i]); } int flow=dinic(); if (flow==sum) printf("YES\n");else printf("NO\n"); } return 0; }
View Code
相关文章推荐
- [置顶] 【网络流】目录
- [置顶] 网络流专题总结
- [置顶] 萌新瞎讲网络流之最大流【不定期更新理解篇】
- [置顶] 某大型银行深化系统技术方案之十:核心层之任务调度
- BZOJ 1189: [HNOI2007]紧急疏散evacuate|网络流|二分答案
- 【置顶】博客转移!!!
- *(网络流)费用流复习~
- [置顶] ffmpeg滤镜专题-1 反交错处理
- poj 2396 Budget【有上下界的网络流】
- [置顶] ubuntu下配置conky-一个漂亮的系统监控软件
- [置顶] 【JavaScript语言精粹系列】apply的用法
- [置顶] iOS-通过Message框架开发一个Sticker Pack(无需代码)(第一篇)
- [置顶] 计算机网络漫谈
- [置顶] Dapper.net Nullable<DateTime>类型数据转换时异常问题解决
- 【网络流24题】星际转移问题
- [置顶] How to compile openjdk 7 in RHEL5
- [置顶]浅谈 GPU图形渲染管线
- [置顶] java面试必备之异常处理机制
- [置顶] java截取2个特定字符之间的字符串
- 【POJ 3281 Dining】& 网络流Dinic & 拆点