Pagini recente » Cod sursa (job #3121176) | Cod sursa (job #2485032) | Cod sursa (job #577865) | Cod sursa (job #1843684) | Cod sursa (job #2695147)
#include <bits/stdc++.h>
#define Nmax 10005
#define pb push_back
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int n, m, x, y, C, c[Nmax][Nmax], f[Nmax][Nmax], flux, viz[Nmax], t[Nmax];
vector <int> v[Nmax];
int bfs()
{
memset(viz, 0, sizeof(viz));
viz[1]=1;
queue <int> q;
int u;
viz[1]=1;
q.push(1);
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=0;i<v[u].size();i++)
if(!viz[v[u][i]] && c[u][v[u][i]]!=f[u][v[u][i]])
{
viz[v[u][i]]=1;
if(v[u][i]!=n)
{
t[v[u][i]]=u;
q.push(v[u][i]);
}
}
}
if(!viz[n])
return 0;
for(int i=0;i<v[n].size();i++)
{
t[n]=v[n][i];
if(viz[t[n]] && c[t[n]][n]!=f[t[n]][n])
{
int fmin=INT_MAX;
for(u=n;u!=1;u=t[u])
fmin=min(fmin, c[t[u]][u]-f[t[u]][u]);
flux+=fmin;
for(u=n;u!=1;u=t[u])
{
f[t[u]][u]+=fmin;
f[u][t[u]]-=fmin;
}
}
}
return 1;
}
int main()
{
fin >> n >> m;
for(int i=1;i<=m;i++)
{
fin >> x >> y >> C;
c[x][y]=C;
v[x].pb(y);
v[y].pb(x);
}
while(bfs());
fout << flux;
return 0;
}