Pagini recente » Cod sursa (job #2121235) | Cod sursa (job #1404370) | Cod sursa (job #2677907) | Cod sursa (job #2273217) | Cod sursa (job #2087456)
#include<fstream>
#include<iostream>
#include<vector>
#define pb push_back
#define DN 1005
#include<queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,d,g,c[DN][DN],z,viz[DN],f[DN][DN],pr[DN],fmin;
vector<int>v[DN];
queue<int>q;
int flow;
int vf()
{
int nod;
for(int i=1;i<=n;i++)
viz[i]=0;
viz[1]=1;
q.push(1);
while(!q.empty())
{
nod=q.front();
q.pop();
if(nod==n)
continue;
for(auto i:v[nod])
if(!viz[i])
{
if(f[nod][i]==c[nod][i])
continue;
viz[i]=1;
pr[i]=nod;
q.push(i);
}
}
return viz[n];
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>d>>g>>z;
v[d].pb(g);
v[g].pb(d);
c[d][g]=z;
}
int t;
while(vf())
{
for(auto i:v[n])
{
pr[n]=i;
t=n;
fmin=(1<<28);
while(t!=1)
{
fmin=min(fmin,c[pr[t]][t]-f[pr[t]][t]);
t=pr[t];
}
t=n;
while(t!=1)
{
f[pr[t]][t]+=fmin;
f[t][pr[t]]-=fmin;
t=pr[t];
}
flow+=fmin;
}
}
fout<<flow;
}