赤裸裸的网络流- -
代码:
#include<stdio.h>
#include<queue>
#include<memory.h>
using namespace std;
int map[200][200],q[200];
int BFS(int star,int end)
{
int flat[200];
int e;
queue<int>que;
memset(flat,0,sizeof(flat));
memset(q,-1,sizeof(q));
que.push(star);
flat[0]=1;
while(!que.empty())
{
e=que.front();
que.pop();
if(e==end)
return 1;
for(int i=0;i<=end;i++)
if(map[e][i]!=0&&flat[i]!=1)
{
que.push(i);
flat[i]=1;
q[i]=e;
}
}
return 0;
}
int main()
{
int m,n;
int end;
int max;
int min;
while(scanf("%d%d",&m,&n)!=EOF)
{
max=0;
end=n-1;
memset(map,0,sizeof(map));
while(m--)
{
int i,j,c;
scanf("%d%d%d",&i,&j,&c);
map[i-1][j-1]+=c;
}
while(BFS(0,end))
{
int e;
min=100000000;
e=end;
while(q[e]!=-1)
{
if(min>map[q[e]][e])
min=map[q[e]][e];
e=q[e];
}
max+=min;
e=end;
while(q[e]!=-1)
{
map[q[e]][e]-=min;
map[e][q[e]]+=min;
e=q[e];
}
}
printf("%d\n",max);
}
}