最大流
#include<iostream>
using namespace std;
int n,m;
int c[205][205],f[205][205],s,t;
int pre[205],ans;
int find()
{
int i=0,j=0,v,u,used[205];
for(i=1;i<=n;i++)
{
pre[i]=-1;
used[i]=0;
}
int q[205],head=0,end=0;
q[end++]=s;
used[s]=1;
while(head<end)
{
u=q[head++];
for(v=1;v<=n;v++)
{
if(!used[v] && c[u][v]>f[u][v])
{
used[v]=1;
pre[v]=u;
q[end++]=v;
if(v==t)
return 1;
}
}
}
return 0;
}
void adjust()
{
int Min=INT_MAX,v,u;
v=t;
while(v!=s)
{
u=pre[v];
if(Min>(c[u][v]-f[u][v]))
Min=c[u][v]-f[u][v];
v=u;
}
v=t;
while(v!=s)
{
u=pre[v];
f[u][v]+=Min;
f[v][u]-=Min;
v=u;
}
ans+=Min;
}
int main()
{
int i,x,y,v;
while(scanf("%d%d",&m,&n)==2)
{
memset(c,0,sizeof(c));
memset(f,0,sizeof(f));
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&v);
c[x][y]+=v;
}
s=1,t=n;ans=0;
while(find())
adjust();
printf("%d/n",ans);
}
return 0;
}
using namespace std;
int n,m;
int c[205][205],f[205][205],s,t;
int pre[205],ans;
int find()
{
int i=0,j=0,v,u,used[205];
for(i=1;i<=n;i++)
{
pre[i]=-1;
used[i]=0;
}
int q[205],head=0,end=0;
q[end++]=s;
used[s]=1;
while(head<end)
{
u=q[head++];
for(v=1;v<=n;v++)
{
if(!used[v] && c[u][v]>f[u][v])
{
used[v]=1;
pre[v]=u;
q[end++]=v;
if(v==t)
return 1;
}
}
}
return 0;
}
void adjust()
{
int Min=INT_MAX,v,u;
v=t;
while(v!=s)
{
u=pre[v];
if(Min>(c[u][v]-f[u][v]))
Min=c[u][v]-f[u][v];
v=u;
}
v=t;
while(v!=s)
{
u=pre[v];
f[u][v]+=Min;
f[v][u]-=Min;
v=u;
}
ans+=Min;
}
int main()
{
int i,x,y,v;
while(scanf("%d%d",&m,&n)==2)
{
memset(c,0,sizeof(c));
memset(f,0,sizeof(f));
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&v);
c[x][y]+=v;
}
s=1,t=n;ans=0;
while(find())
adjust();
printf("%d/n",ans);
}
return 0;
}