Pagini recente » Cod sursa (job #1816597) | Cod sursa (job #2527576) | Cod sursa (job #625578) | Cod sursa (job #2830010) | Cod sursa (job #2782198)
#include <bits/stdc++.h>
#define nmax 1001
using namespace std;
string prob="maxflow";
ifstream in(prob+".in");
ofstream out(prob+".out");
vector<int> vecini[nmax];
int adj[nmax][nmax];
int level[nmax];
int n,m;
bool levelG(){
int q[nmax];
int primulQ=0;
int ultimulQ=0;
q[ultimulQ++]=1;
for(int i=1;i<nmax;i++)level[i]=0;
while(primulQ!=ultimulQ){
int nod=q[primulQ++];
if(nod==n)return 1;
for(auto i:vecini[nod]){
if(adj[nod][i]&&!level[i]&&i!=1){
level[i]=level[nod]+1;
q[ultimulQ++]=i;
}
}
}
return 0;
}
int pushF(int nod,int minn){
if(nod==n)return minn;
for(auto i:vecini[nod]){
if((level[nod]+1==level[i])&&adj[nod][i]){
int tmp=pushF(i,min(minn,adj[nod][i]));
if(tmp){
adj[nod][i]-=tmp;
adj[i][nod]+=tmp;
return tmp;
}
}
}
return 0;
}
int main(){
in>>n>>m;
int x,y,z;
while(m--){
in>>x>>y>>z;
vecini[x].push_back(y);
vecini[y].push_back(x);
adj[x][y]=z;
}
int sum=0;
while(levelG()){
int t=1;
while(t){
t=pushF(1,INT_MAX);
sum+=t;
}
}
out<<sum;
}