Pagini recente » Cod sursa (job #1193153) | Cod sursa (job #2728251) | Cod sursa (job #1542755) | Cod sursa (job #3198075) | Cod sursa (job #2979275)
#include <bits/stdc++.h>
using ll=long long;
#define S second
#define F first
#define endl '\n'
#define spid ios_base::sync_with_stdio(false);cin.tie(NULL);
const int mod=1e9+7;
const double pi=3.14159265359;
const int maxn=501;
using namespace std;
ll n,m,flag=1;
vector<vector<int>> A(maxn,vector<int>());
ll cap[maxn][maxn];
ll L[maxn],ans=0,ptr[maxn];
void build_L(){
int chk[maxn];
for(int i=0;i<n;i++)chk[i]=0;
queue<int> Q;
Q.push(0);
while(Q.size()){
int i=Q.front();
chk[i]=1;
Q.pop();
for(int j=0;j<A[i].size();j++){
if(chk[A[i][j]]||!cap[i][A[i][j]])continue;
L[A[i][j]]=L[i]+1;
Q.push(A[i][j]);
}
}
if(L[n-1]==-1)flag=0;
}
ll dfs(int i,ll pushed){
if(pushed==0)return 0;
if(i==n-1)return pushed;
for(ll& j=ptr[i];j<A[i].size();j++){
if(L[i]==L[A[i][j]]-1&&cap[i][A[i][j]]>0){
ll tr=dfs(A[i][j],min(pushed,cap[i][A[i][j]]));
if(tr==0)continue;
cap[i][A[i][j]]-=tr;
cap[A[i][j]][i]+=tr;
return tr;
}
}
return 0;
}
void get_blocking_flow(){
for(int i=0;i<n;i++){
L[i]=-1;
}
L[0]=0;
build_L();
if(flag){
for(int i=0;i<n;i++)ptr[i]=0;
ll flow=1e18;
while(flow){
flow=dfs(0,1e18);
ans+=flow;
}
}
}
int main(){
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
cin>>n>>m;
for(int i=0;i<m;i++){
ll c1,c2,c3;
cin>>c1>>c2>>c3;
c1--;
c2--;
if(c2==0||c1==n-1)continue;
if(cap[c1][c2]==0){
A[c1].push_back(c2);
A[c2].push_back(c1);
}
cap[c1][c2]+=c3;
}
while(flag){
get_blocking_flow();
}
cout<<ans<<endl;
}