Pagini recente » Borderou de evaluare (job #1693884) | Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2705735)
#include <fstream>
#include <iomanip>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#define pb push_back
#define INF 1e9
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n,m, x, y , z, f[1010][1010], viz[1010], T[1010], fmn, ans,nod;
vector <int> G[1010];
queue <int> q;
bool bfs();
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
for(int i=1; i<=m; ++i)
{
cin>>x>>y>>z;
f[x][y]=z;
G[x].pb(y);
G[y].pb(x);
}
while(bfs())
{
for(auto an:G[n])
{
if(!viz[an] || !f[an][n])
continue;
T[n]=an;
fmn=INF;
for(int nod=n; nod!=1; nod=T[nod])
fmn=min(fmn, f[T[nod]][nod]);
for(int nod=n; nod!=1; nod=T[nod])
f[T[nod]][nod]-=fmn, f[nod][T[nod]]+=fmn;
ans+=fmn;
}
}
cout<<ans<<'\n';
return 0;
}
bool bfs()
{
q.push(1);
memset(viz,0,sizeof(viz));
while(!q.empty())
{
nod=q.front(); q.pop();
if(nod==n)
continue;
for(auto nn:G[nod])
{
if(viz[nn] || f[nod][nn]==0)
continue;
q.push(nn);
viz[nn]=1;
T[nn]=nod;
}
}
return viz[n];
}