Pagini recente » Cod sursa (job #1521544) | Cod sursa (job #233440) | Cod sursa (job #2617098) | Cod sursa (job #219987) | Cod sursa (job #1340167)
#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]=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);
if(c[p][*it]<min) min=c[p][*it];
break;
}
q.pop();
}
if(min==inf) return 0;
while(u>1)
{
c[drum[u-1]][drum[u]]-=min;
c[drum[u]][drum[u-1]]+=min;
--u;
}
R+=min;
return 1;
}