uva 820

自己写的第一个网络流,用bfs找最短路

 

输入的时候两个点之间可以有多条边,权值相加就行了

 

#include<stdio.h> #include<string.h> #include<queue> #define FOR(i,s,e) for(int i=s;i<e;i++) using namespace std; int s,d,n,c,ans; int g[100][100]; int bfs() { int p[100]; queue<int> q; q.push(s); memset(p,-1,sizeof(p)); p[s]=s; int t; while(!q.empty()) { t=q.front(); q.pop(); for(int i=0;i<n;i++) if(g[t][i]>0 && p[i]==-1) { p[i]=t; q.push(i); } } int min=0xffffff,tt=-1; t=d; if(p[d]==-1)return 0; while(p[t]!=t) { tt=t;t=p[t]; min<?=g[t][tt]; } t=d; while(p[t]!=t) { tt=t;t=p[t]; g[t][tt]-=min; g[tt][t]+=min; } return min; } int main() { int times=1; while(scanf("%d",&n)!=EOF && n!=0) { scanf("%d%d%d",&s,&d,&c); s--;d--; int a,b,t; memset(g,0,sizeof(g)); FOR(i,0,c) { scanf("%d%d%d",&a,&b,&t); a--;b--; g[a][b]+=t; g[b][a]+=t; } ans=0; while(t=bfs()) { ans+=t; } printf("Network %d/nThe bandwidth is %d./n/n",times++,ans); } }  

你可能感兴趣的:(uva 820)