Pagini recente » Cod sursa (job #982792) | Cod sursa (job #1659983) | Cod sursa (job #2057832) | Cod sursa (job #1043358) | Cod sursa (job #1191083)
#include <fstream>
#include <algorithm>
#include <vector>
#define pinf 1000000000
using namespace std;
//ifstream f("maxflow.in");
//ofstream g("maxflow.out");
int N,M;
int capacitate[1002][1002],flux[1002][1002];
int lant[1002],q[1002],viz[1002];
int pq,nq;
vector <int> l[1002];
/*void citire(int &N, int &M)
{
int x,y,capac;
f>>N>>M;
for(int i=1;i<=M;i++)
{
f>>x>>y>>capac;
l[x].push_back(y);
l[y].push_back(x);
capacitate[x][y]=capac;
}
}*/
int bf(int s, int t)
{int x;
for(int i=1;i<=N;i++)
viz[i]=-1;
pq=nq=1;
q[pq]=s;
viz[s]=1;
lant[s]=-1;
while (pq<=nq)
{
x=q[pq];
viz[x]=1;
for(int i=0;i<l[x].size();i++)
{
if(viz[l[x][i]]==-1 && capacitate[x][l[x][i]]-flux[x][l[x][i]]>0)
{
q[++nq]=l[x][i];
viz[l[x][i]]=1;
lant[l[x][i]]=x;
}
}
pq++;
}
if(viz[t]==1) return 1;
return 0;
}
int Ford(int s, int t)
{
int i;
int fluxmaxim=0;
while (bf(s,t))
{
int x=pinf;
for (i=N;lant[i]>0;i=lant[i])
x=min(x,capacitate[lant[i]][i]-flux[lant[i]][i]);
for (i=N;lant[i]>0;i=lant[i])
{
flux[lant[i]][i]+=x;
flux[i][lant[i]]-=x;
}
fluxmaxim+=x;
}
return fluxmaxim;
}
int main()
{
//citire(N,M);
int x,y,capac;
//f>>N>>M;
freopen ("maxflow.in","r",stdin);
freopen ("maxflow.out","w",stdout);
scanf("%d%d", &N,&M);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&x,&y,&capac);
l[x].push_back(y);
l[y].push_back(x);
capacitate[x][y]=capac;
}
printf("%d",Ford(1,N));
return 0;
}