poj 1273 Drainage Ditches

#include<iostream>            //网络流
#include<queue>
using namespace std;
#define inf 0x7fffffff
int flow[202][202],cap[202][202],a[202],p[202],s,t,f;
int main()
{
int n,m;
while(cin>>n>>m)
{
memset(cap,
0,sizeof(cap));
int si,ei,ci;
while(n--)
{
cin
>>si>>ei>>ci;
cap[si][ei]
+=ci; //边是有向的,而且可能重复
}
s
=1;t=m;
queue
<int> col;
memset(flow,
0,sizeof(flow));
f
=0;
while(1)
{
memset(a,
0,sizeof(a));
a[s]
=inf;
col.push(s);
while(!col.empty())
{
int u=col.front();col.pop();
for(int i=1;i<=m;++i)
if(!a[i]&&cap[u][i]>flow[u][i])
{
a[i]
=min(a[u],cap[u][i]-flow[u][i]);
p[i]
=u;
col.push(i);
}
}
if(a[t]==0)
break;
for(int i=t;i!=s;i=p[i])
flow[p[i]][i]
+=a[t],flow[i][p[i]]-=a[t];
f
+=a[t];
}
cout
<<f<<endl;
}
return 0;
}

  

posted on 2011-07-22 20:22  sysu_mjc  阅读(119)  评论(0编辑  收藏  举报

导航