Pagini recente » Cod sursa (job #804259) | Cod sursa (job #841874) | Cod sursa (job #2720698) | Cod sursa (job #2736914) | Cod sursa (job #2574459)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) { cerr << " " << H; debug_out(T...);}
#define dbg(...) cerr << #__VA_ARGS__ << " ->", debug_out(__VA_ARGS__)
#define dbg_v(x, n) do{cerr<<#x"[]: ";for(int _=0;_<n;++_)cerr<<x[_]<<" ";cerr<<'\n';}while(0)
#define dbg_ok cerr<<"OK!\n"
typedef pair<int,int> pii;
typedef long long int ll;
typedef long double ld;
const int DMAX = 1010;
vector <int> arb[DMAX];
queue <int> q;
int V[DMAX];
int tata[DMAX];
int M[DMAX][DMAX];
int n,m;
ll ans;
bool bfs();
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int t,i,j;
int x,y,z;
int cap;
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y>>z;
M[x][y]=z;
arb[x].pb(y);
arb[y].pb(x);
}
while(bfs()){
for(auto& it:arb[n]){
cap=M[it][n];
for(i=it;i>1;i=tata[i])
cap=min(cap,M[tata[i]][i]);
if(cap <= 0)
continue;
M[it][n]-=cap;
M[n][it]+=cap;
for(i=it;i>1;i=tata[i]){
M[tata[i]][i]-=cap;
M[i][tata[i]]+=cap;
}
ans+=cap;
}
}
fout<<ans<<'\n';
return 0;
}
bool bfs(){
vector <bool> uz(n+1,0);
q.push(1);
uz[1]=true;
while(!q.empty()){
int node=q.front();
q.pop();
for(auto& it:arb[node])
if(!uz[it] && M[node][it] > 0){
uz[it]=true;
tata[it]=node;
if(it != n)
q.push(it);
}
}
if(uz[n])
return true;
return false;
}