Pagini recente » Cod sursa (job #1855650) | Cod sursa (job #2825096) | Cod sursa (job #1670023) | Cod sursa (job #1670059) | Cod sursa (job #3350497)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
vector<int>adj[1005];
int c[1005][1005];
int f[1005][1005];
int p[1005];
int n;
int bfs(){
for(int i=1;i<=n;i++){
p[i]=-1;
}
queue<int>q;
q.push(1);
p[1]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(auto y:adj[x]){
int s=c[x][y]-f[x][y];
if(s>0&&p[y]==-1){
p[y]=x;
q.push(y);
if(y==n) return 1;
}
}
}
return 0;
}
int main()
{
int m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
adj[x].push_back(y);
adj[y].push_back(x);
c[x][y]=z;
}
while(bfs()){
int nod=p[n];
int ant=n;
int flow=1e9;
while(nod>0){
flow=min(flow,c[nod][ant]-f[nod][ant]);
ant=nod;
nod=p[nod];
}
nod=p[n];
ant=n;
while(nod>0){
f[nod][ant]+=flow;
f[ant][nod]-=flow;
ant=nod;
nod=p[nod];
}
}
int mx=0;
for(auto e:adj[1]){
mx+=f[1][e];
}
cout<<mx;
return 0;
}