Pagini recente » Cod sursa (job #3177994) | Cod sursa (job #2627823) | Cod sursa (job #2366573) | Autentificare | Cod sursa (job #2221496)
#include <bits/stdc++.h>
using namespace std;
const int NMax = 1003;
int x,y,C,n,m;
int tata[NMax],viz[NMax];
int c[NMax][NMax],f[NMax][NMax];
vector<int> G[NMax];
int BFS(){
memset(viz,0,sizeof(viz));
queue<int> q;
q.push(1);
viz[1] = 1;
while(!q.empty()){
int nod = q.front();
q.pop();
if(n == nod)
continue;
for(int i = 0; i < G[nod].size(); ++i){
if(!viz[G[nod][i]] && f[nod][G[nod][i]] != c[nod][G[nod][i]]){
q.push(G[nod][i]);
viz[G[nod][i]] = 1;
tata[G[nod][i]] = nod;
}
}
}
return viz[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; ++i){
scanf("%d%d%d",&x,&y,&C);
G[x].push_back(y);
G[y].push_back(x);
c[x][y] = C;
}
int F = 0;
tata[1] = 0;
while(BFS()){
for(int i = 0; i < G[n].size(); ++i){
int e = 0;
if(viz[G[n][i]] == 1 && f[G[n][i]][n] != c[G[n][i]][n])
e = G[n][i];
else continue;
tata[n] = e;
int x = n;
int mn = 110003;
while(tata[x] != 0){
mn = min(mn, c[tata[x]][x] - f[tata[x]][x]);
x = tata[x];
}
x = n;
while(tata[x] != 0){
f[tata[x]][x] += mn;
f[x][tata[x]] -= mn;
x = tata[x];
}
F += mn;
}
}
printf("%d\n",F);
return 0;
}