Pagini recente » Cod sursa (job #861750) | Cod sursa (job #3208056) | Monitorul de evaluare | Cod sursa (job #2830379) | Cod sursa (job #2670879)
#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++];
if(x!=n)
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()
{
#ifdef HOME
freopen("test.in","r",stdin);
freopen("test.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]&&F[it][n]<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]-F[tata[j]][j]);
if(min1!=0)
for(int j=n; j>1; j=tata[j])
{
F[tata[j]][j]+=min1;
F[j][tata[j]]-=min1;
}
sum+=min1;
}
for(int i=1; i<=n; i++)
viz[i]=0;
}
cout<<sum;
return 0;
}