Pagini recente » Cod sursa (job #47780) | Cod sursa (job #283389) | Cod sursa (job #1424487) | Cod sursa (job #2220462) | Cod sursa (job #2670964)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int 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++];
if(x!=n)
for(auto it:v[x])
if(C[x][it]&&!viz[it])
{
coada[++u]=it;
tata[it]=x;
viz[it]=1;
}
}
return viz[n];
}
void dfs(int nod,int papa)
{
viz[nod]=1;
for(auto it:v[nod])
if(it!=papa&&!viz[it]&&C[nod][it])
dfs(it,nod);
}
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;
}
int sum=0;
while(bfs())
{
for(auto it:v[n])
if(viz[it]&&C[it][n])
{
int min1=1e9;
tata[n]=it;
for(int j=n; j!=1; j=tata[j])
min1=min(min1,C[tata[j]][j]);
if(min1!=0)
for(int j=n; j!=1; j=tata[j])
{
C[tata[j]][j]-=min1;
C[j][tata[j]]+=min1;
}
sum+=min1;
}
for(int i=1; i<=n; i++)
viz[i]=0;
}
cout<<sum;
/*dfs(1,0);
sum=0;
for(i=1;i<=n;i++)
for(auto it:v[i])
if(viz[i]&&!viz[it])
sum+=C[i][it]+C[it][i];
cout<<sum;*/
return 0;
}