您的位置:首页 > 理论基础 > 计算机网络

网络流(置顶)

2014-05-02 23:28 183 查看
poj1637 判断混合图是否能形成欧拉回路:网络流做奇偶性判断(inspire)

//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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: