Pagini recente » Cod sursa (job #2807181) | Cod sursa (job #2417617) | Cod sursa (job #151842) | Cod sursa (job #1845163) | Cod sursa (job #921043)
Cod sursa(job #921043)
#include<stdio.h>
#include<queue>
#include<vector>
#define pb push_back
#define mp make_pair
#define maxn 1005
using namespace std;
int n,m,nr=1,flow;
int c[maxn][maxn],f[maxn][maxn];
int v[maxn],t[maxn];
vector <int> l[maxn];
void cit()
{
int i;
int x,y,ct;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&ct);
l[x].pb(y);
l[y].pb(x);
c[x][y]=ct;
}
}
int bfs()
{
int k;
queue <int> q;
q.push(1); v[1]=nr;
while(!q.empty())
{
k=q.front();
if(k==n) {q.pop(); continue;}
for(unsigned int i=0;i<l[k].size();i++)
if(v[l[k][i]]!=nr && f[k][l[k][i]]<c[k][l[k][i]])
{
q.push(l[k][i]);
v[l[k][i]]=nr;
t[l[k][i]]=k;
}
q.pop();
}
return v[n];
}
void ed_k()
{
int j;
int minn;
while(bfs()==nr)
{
for(unsigned int i=0;i<l[n].size();i++)
if(v[l[n][i]]==nr && f[l[n][i]][n]<c[l[n][i]][n])
{
t[n]=l[n][i];
minn=999999999;
for(j=n;t[j]!=0;j=t[j])
if(minn>c[t[j]][j]-f[t[j]][j])
minn=c[t[j]][j]-f[t[j]][j];
for(j=n;t[j]!=0;j=t[j])
{
f[t[j]][j]+=minn;
f[j][t[j]]-=minn;
}
flow+=minn;
}
nr++;
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
cit();
ed_k();
printf("%d",flow);
fclose(stdin);
fclose(stdout);
return 0;
}