Pagini recente » Cod sursa (job #1881187) | Cod sursa (job #876091) | Cod sursa (job #906705) | Cod sursa (job #2457009) | Cod sursa (job #566446)
Cod sursa(job #566446)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int k,coada[1005],tata[1005],n,m,cmin,a[1003][1003],fl[1003][1003],flux;
vector<int> v[1005];
int bf()
{ int i,j;
coada[0]=1; k=1;
for(i=2;i<=n;i++)
tata[i]=0;
for(i=0;i<k;i++)
if(coada[i]!=n)
for(j=0;j<v[coada[i]].size();j++)
if(!tata[v[coada[i]][j]]&&a[coada[i]][v[coada[i]][j]]!=fl[coada[i]][v[coada[i]][j]])
{tata[v[coada[i]][j]]=coada[i];
coada[k++]=v[coada[i]][j];}
return tata[n];}
int main()
{int i,x,y,c;
ifstream f("maxflow.in");
f>>n>>m;
for(i=1;i<=m;i++)
{f>>x>>y>>c;
v[x].push_back(y);
v[y].push_back(x);
a[x][y]=c;}
tata[1]=-1;
for(flux=0;bf();)
for(i=0;i<v[n].size();i++)
if(tata[v[n][i]]&&a[v[n][i]][n]!=fl[v[n][i]][n])
{cmin=1000000000;
tata[n]=v[n][i];
x=n;
while(x!=1)
{if(cmin>a[tata[x]][x]-fl[tata[x]][x]) cmin=a[tata[x]][x]-fl[tata[x]][x];
x=tata[x]; }
if(!cmin) continue;
x=n;
while(x!=1)
{fl[tata[x]][x]+=cmin;
fl[x][tata[x]]-=cmin;
x=tata[x];}
flux+=cmin;
}
ofstream g("maxflow.out");
g<<flux;
f.close(); g.close();
return 0;
}