Pagini recente » Cod sursa (job #3148976) | Cod sursa (job #1054925) | Cod sursa (job #829418) | Cod sursa (job #2033721) | Cod sursa (job #2670872)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int F[1001][1001],C[1001][1001];
int tata[1001],n;
int coada[1001],viz[1001];
vector <int> v[1001];
int bfs()
{
int u=-1,p=0;
coada[++u]=1;
viz[1]=1;
while(p<=u)
{
int x=coada[p++];
for(auto it:v[x])
{
if(F[x][it]<C[x][it]&&!viz[it])
{
coada[++u]=it;
tata[it]=x;
viz[it]=1;
}
}
}
return viz[n];
}
int main()
{
#ifndef HOME
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
#endif // HOME
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int m,i,a,b,c;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
v[a].push_back(b);
v[b].push_back(a);
C[a][b]=c;
}
while(bfs())
{
for(auto it:v[n])
{
int min1=1e9;
tata[n]=it;
for(int j=n;j>1;j=tata[j])
min1=min(min1,C[tata[j]][j]-F[tata[j]][j]);
if(min1!=0)
for(int j=n;j>1;j=tata[j])
F[tata[j]][j]+=min1;
}
for(int i=1;i<=n;i++)
viz[i]=0;
}
int sum=0;
for(int i=1;i<=n;i++)
sum+=F[i][n];
cout<<sum;
return 0;
}