Pagini recente » Cod sursa (job #954305) | Cod sursa (job #3323789) | Cod sursa (job #2738743) | Cod sursa (job #849727) | Cod sursa (job #3329734)
#include<fstream>
#include<iostream>
#include <queue>
#include <cstring>
#define NMX 10001
using namespace std;
int tata[NMX],n,m,viz[NMX];
//vector<int> l[NMX];
vector<int> lrezid[NMX];
int rezid[NMX][NMX]={0};
int bfs( ){
int i,s=0,x;
for(i=0;i<=n;i++)
viz[i]=tata[i]=0;
queue<int> c;
c.push(s);
viz[s]=1;
while(c.size()>0){
x=c.front();
c.pop();
for(int y:lrezid[x]){
if(viz[y]==0 && rezid[x][y]>0){
tata[y]=x;
if(y==n-1)
return 1;
c.push(y);
viz[y]=1;
}
}
}
return 0;
}
int main(){
ifstream fs("maxflow.in");
int i,x,y,j;
int c;
fs>>n>>m;
for(i=0;i<m;i++){
fs>>x>>y>>c;
// l[x-1].push_back(y-1);
lrezid[x-1].push_back(y-1);
lrezid[y-1].push_back(x-1);
rezid[x-1][y-1]=c;
}
fs.close();
int fmax=0;
while(bfs()){
int iP=110000;
int t=n-1;
while(t!=0) {
if(iP>rezid[tata[t]][t])
iP= rezid[tata[t]][t];
t=tata[t];
}
t=n-1;
while(t!=0) {
rezid[tata[t]][t]-=iP;
rezid[t][tata[t]]+=iP;
t=tata[t];
}
fmax+=iP;
}
ofstream g("maxflow.out");
g<<fmax;
g.close();
return 0;
}