Pagini recente » Cod sursa (job #3239426) | Cod sursa (job #581701) | Cod sursa (job #363282) | Cod sursa (job #2642711) | Cod sursa (job #2154886)
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pii pair<int,int>
#define fs first
#define sc second
#define pb push_back
#define NMax 1001
#define oo 1000000000
#define MOD 1000000007
#define IOFile ifstream fin("maxflow.in"); ofstream fout("maxflow.out");
using namespace std;
IOFile
vector<int> G[NMax];
vector<int> G2[NMax];
vector<pii> E;
int dist[NMax];
int n,m,a,b,c;
int Flow;
bool BFS(){
queue<int> q;
for(int i=1;i<=n;i++) G2[i].clear();
memset(dist,0,sizeof(dist));
dist[1] = 1;
q.push(1);
while(q.size()){
int node = q.front(); q.pop();
if(node == n) return 1;
for(auto it:G[node]){
if(!E[it].sc) continue;
if(!dist[E[it].fs]) dist[E[it].fs] = dist[node]+1, q.push(E[it].fs);
if(dist[E[it].fs] == dist[node] + 1) G2[node].push_back(it);
}
}
return 0;
}
int DFS(int node,int c){
if(node == n) {
Flow += c;
return c;
}
int Sum = 0;
for(auto it:G2[node]){
int F = DFS(E[it].fs, min(c,E[it].sc));
Sum += F;
c-=F;
E[it].sc -= F;
E[it^1].sc += F;
}
return Sum;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++){
fin>>a>>b>>c;
G[a].push_back(E.size());
E.push_back({b,c});
G[b].push_back(E.size());
E.push_back({a,0});
}
while(BFS()) DFS(1,oo);
fout<<Flow<<'\n';;
return 0;
}