Pagini recente » Cod sursa (job #2021360) | Cod sursa (job #3191097) | Cod sursa (job #1940872) | Cod sursa (job #461303) | Cod sursa (job #726128)
Cod sursa(job #726128)
#include<fstream>
#include<vector>
#include<stdio.h>
#define maxn 1001
#define inf "maxflow.in"
#define outf "maxflow.out"
#define pb push_back
#define infinit 0x3f3f3f3f
using namespace std;
ifstream in(inf);
ofstream out(outf);
vector<int> g[maxn];
int c[maxn][maxn],r[maxn][maxn],v[maxn],N,M,coada[maxn];
int viz[maxn];
void read()
{
int x,y,z;
in>>N>>M;
for(int i=1;i<=M;i++)
{
in>>x>>y>>z;
g[x].pb(y);
g[y].pb(x);
c[x][y]=z;
}
}
int bfs()
{
int i,j,tata,nod;
coada[0]=1;
coada[1]=1;
memset(viz, 0, sizeof(viz) );
viz[1]=true;
for(i=1;i<=coada[0];i++)
{
tata=coada[i];
if(tata==N) continue;
for(j=0;j<g[tata].size();j++)
{
nod=g[tata][j];
if(c[tata][nod]==r[tata][nod] || viz[nod]) continue;
viz[nod]=1;
coada[++coada[0]]=nod;;
v[nod]=tata;
}
}
return viz[N];
}
int main()
{
read();
int flux=0,fluxmin,i,nod;
for(;bfs();)
{
for(i=0;i<g[N].size();i++)
{
nod=g[N][i];
if(c[nod][N]==r[nod][N] || !viz[nod]) continue;
v[N]=nod;
fluxmin=infinit;
for(nod=N;nod!=1;nod=v[nod])
fluxmin=min(fluxmin, c[v[nod]][nod]-r[v[nod]][nod]);
if(fluxmin==0) continue;
for(nod=N;nod!=1;nod=v[nod])
{
r[v[nod]][nod]+=fluxmin;
r[nod][v[nod]]-=fluxmin;
}
flux+=fluxmin;
}
}
out<<flux<<"\n";
return 0;
}