Pagini recente » Cod sursa (job #163834) | Cod sursa (job #717325) | Cod sursa (job #2242876) | Cod sursa (job #766215) | Cod sursa (job #1340494)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
const int inf = 1<<30;
#define pb push_back
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int N,M,t[1005],c[1005][1005],drum[1005],u,R;
bool viz[1005];
vector<int> v[1005];
queue<int> q;
int bf(int i);
int main()
{
in>>N>>M;
int A,B,C;
for(;M;--M)
{
in>>A>>B>>C;
v[A].pb(B);
v[B].pb(A);
c[A][B]=C;
}
while(bf(1));
out<<R<<'\n';
}
int bf(int i)
{
int p,j,min=inf;
for(j=1;j<=N;++j) viz[j]=t[j]=0;
vector<int> :: iterator it;
q.push(i);
viz[i]=1;
while(!q.empty())
{
p=q.front();
drum[++u]=p;
for(it=v[p].begin();it!=v[p].end();++it)
if(!viz[*it] && c[p][*it])
{
viz[*it]=1;
t[*it]=p;
q.push(*it);
}
q.pop();
}
if(!t[N]) return 0;
for(j=N;t[j];j=t[j])
{
if(c[t[j]][j]<min) min=c[t[j]][j];
}
for(j=N;t[j];j=t[j])
{
c[t[j]][j]-=min;
c[j][t[j]]+=min;
}
R+=min;
return 1;
}