Pagini recente » Cod sursa (job #1013983) | Cod sursa (job #1325635) | Cod sursa (job #2180479) | Cod sursa (job #1811168) | Cod sursa (job #557795)
Cod sursa(job #557795)
#include<fstream>
#include<vector>
#include<iterator>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
# define nmax 1002
#define INF 110002
# define Min(a,b) ((a)<(b)? (a):(b))
int N,M,t[nmax],F[nmax][nmax],cap[nmax][nmax],Q[nmax];
vector <int> v[nmax];
void citire()
{
f>>N>>M;
int i,j,c;
for(;M;--M)
f>>i>>j>>c,
v[i].push_back(j),
v[j].push_back(i),
cap[i][j]=c;
}
int BF(int sursa,int dest)
{
bool viz[nmax];
memset(viz,0,sizeof(viz));
memset(t,0,sizeof(t));
Q[0]=sursa; viz[sursa]=1;
int nod,st=0,dr=0;
vector <int>::const_iterator it;
while(st<=dr)
{
nod=Q[st++];
for(it=v[nod].begin();it<v[nod].end();++it)
if(cap[nod][*it]>F[nod][*it] && !viz[*it])
{
t[*it]=nod;
Q[++dr]=*it;
viz[*it]=1;
if(*it==N) return 1;
}
}
return 0;
}
int edmond_karp(int sursa,int dest)
{
int flux=0,m,i;
while(BF(sursa,dest))
{
m=INF;
for(i=dest;i!=sursa;i=t[i])
m=Min(m,cap[t[i]][i]-F[t[i]][i]);
flux+=m;
for(i=dest;i!=sursa;i=t[i])
F[t[i]][i]+=m,
F[i][t[i]]-=m;
}
return flux;
}
int main()
{
citire();
g<<edmond_karp(1,N)<<'\n';
}