Pagini recente » Cod sursa (job #360778) | Cod sursa (job #2542096) | Cod sursa (job #1223509) | Cod sursa (job #2596171) | Cod sursa (job #2778527)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
string prob="maxflow";
ifstream in(prob+".in");
ofstream out(prob+".out");
int muchii[1001][1001];
int vecini[1001][1001];
int marime[1001];
bool viz[1001];
int c=1<<16;
int n,m;
int tmp;
void dfs(int nod,int minn){
viz[nod]=1;
if(nod==n){tmp=minn;return;}
for(int j=0;j<marime[nod];j++){
int i=vecini[nod][j];
if(muchii[nod][i]>=c&&!viz[i]){
dfs(i,min(minn,muchii[nod][i]));
if(tmp){
muchii[nod][i]-=tmp;
muchii[i][nod]+=tmp;
return;
}
}
}
return;
}
int main(){
in>>n>>m;
int x,y,z;
for(int i=0;i<m;i++){
in>>x>>y>>z;
vecini[x][marime[x]++]=y;
vecini[y][marime[y]++]=x;
muchii[x][y]=z;
}
int s=0;
while(c){
memset(viz+1,0,n+1);
tmp=0;
dfs(1,1<<16);
s+=tmp;
if(!tmp){
c>>=1;
}
}
out<<s;
}