Pagini recente » Cod sursa (job #3229867) | Cod sursa (job #2516510) | Cod sursa (job #1847561) | Cod sursa (job #2690221) | Cod sursa (job #287821)
Cod sursa(job #287821)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
long n,m,c[1001][1001],d[1001],cd[1001],F,R,v[1001],gata;
vector <int> g[1001];
void rd()
{
scanf("%ld%ld",&n,&m);
for(int i=1;i<=n;i++)
{
long x,y,z;
scanf("%ld%ld%ld",&x,&y,&z);
g[x].push_back(y);
g[y].push_back(x);
c[x][y]=z;
}
}
void go(int i)
{
v[i]=1;
cd[1]=i;
int st=1,dr=2;
while(st<dr)
{
int u=cd[st];
for(int j=0;j<g[u].size();j++)
if(c[u][g[u][j]]&&!v[g[u][j]])
{
if(g[u][j]==n) continue;
v[g[u][j]]=1;
cd[dr]=g[u][j];
d[dr]=st;
dr++;
}
st++;
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
rd();
while(!gata)
{
gata=1;
int i;
for(i=1;i<=n;i++)
v[i]=cd[i]=0;
go(1);
for(i=0;i<g[n].size();i++)
if(v[g[n][i]]&&c[g[n][i]][n])
{
gata=0;
int u=g[n][i];
long R=666666666;
d[n]=u;
for(u=g[n][i];d[u];u=d[u])
if(c[d[u]][u]<R) R=c[d[u]][u];
for(u=g[n][i];d[u];u=d[u])
{
c[d[u]][u]-=R;
c[u][d[u]]+=R;
}
F+=R;
}
}
printf("%ld\n",F);
return 0;
}