Pagini recente » Cod sursa (job #1256120) | Cod sursa (job #3123068) | Cod sursa (job #1293244) | Cod sursa (job #441140) | Cod sursa (job #392150)
Cod sursa(job #392150)
#include<stdio.h>
#include<vector>
#include<string.h>
#include<queue>
using namespace std;
vector<int> v[ 1010 ];
int q[ 1010 ];
int n,m,i,j,t[ 1010 ],a,b,C,c[1010 ][ 1010 ],minflow,sol;
bool bf(){
int p = 1,x,i,N,u = 1;
q[1] = 1;
memset(t,0,sizeof(t));
t[1] = -1;
while(p<=u){
x = q[p];
N = v[x].size();
for(i = 0 ; i < N ; i++)
if(!t[v[x][i]] && c[x][v[x][i]])
{u++;
t[v[x][i]] = x;
q[u]=v[x][i];
if(q[u] == n)return true;
}
p++;
}
return false;
}
int main(){
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
for(i = 1 ; i <= m ; i++)
{scanf("%d %d %d",&a,&b,&C);
v[b].push_back(a);
v[a].push_back(b);
c[a][b] = C;
}
while(bf()){
minflow = 1 << 30;
for(i = n ; t[i] != -1;i=t[i])
if(c[t[i]][i] < minflow)
minflow = c[t[i]][i];
sol += minflow;
for(i = n ; t[i] != -1;i = t[i])
{c[i][t[i]] += minflow;
c[t[i]][i] -= minflow;
}
}
printf("%d",sol);
return 0;}