#include <stdio.h>
#include <string.h>
int map[201][201], flag[201], queue[1000], pre[201], m, yes, min, searchmin[201];
int find_min(int a, int b)
{
return a>b?b:a;
}
void bfs()
{
memset(flag, 0, sizeof(flag));
int i, j, head, tail, x;
searchmin[1]=100000;
head=tail=0;
queue[0]=1;
yes=0;
flag[1]=1;
while(head<=tail)
{
x=queue[head];
for(i=1; i<=m; i++)
if( (!flag[i]) && map[x][i])
{
flag[i]=1;
searchmin[i]=find_min(searchmin[x], map[x][i]);
queue[++tail]=i;
pre[i]=x;
if(i==m)
{
yes=1;
goto X;
}
}
head++;
}
X:
min=searchmin[m];
if(!yes) return;
x=m;
while(pre[x])
{
map[ pre[x] ][x]-=min;
map[x][pre[x]] += min;
x=pre[x];
}
}
int main()
{
int n, i, ans;
pre[1]=0;
while(scanf("%d%d", &n, &m)!=EOF)
{
ans=0;
memset(map, 0, sizeof(map));
for(i=0; i<n; i++)
{
int x, y, xy;
scanf("%d%d%d", &x, &y, &xy);
map[x][y]+=xy;
}
while(1)
{
bfs();
if(!yes)break;
else ans+=min;
}
printf("%d\n", ans);
}
return 0;
}
虽然有些地方还是不太明白~~Orz