Pagini recente » Cod sursa (job #2138412) | Cod sursa (job #1762482) | Cod sursa (job #103738) | Cod sursa (job #393753) | Cod sursa (job #584514)
Cod sursa(job #584514)
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#define pb push_back
#define nmax 1010
struct nod{
int lg,c,f;};
int N,M;
vector<nod> G[nmax];
int ante[nmax], viz[nmax], q[nmax];
ofstream fout("maxflow.out");
bool BFS()
{
int i;
for(i=0;i<=N;i++)
{
q[i]=0;
viz[i]=0;
}
int front=1;
q[++q[0]]=1;
viz[1]=1;
int u;
vector<nod>::iterator it;
while(front<=q[0])
{
u=q[front++];
for(it=G[u].begin();it<G[u].end();it++)
{
if(!viz[it->lg])
{
if(it->c>it->f)
{
viz[it->lg]=1;
ante[it->lg]=u;
q[++q[0]]=it->lg;
}
}
}
}
return viz[N];
}
void solve()
{
int fmin,flow=0,i;
vector<nod>::iterator it,jt;
for(;BFS();)
{
for(it=G[N].begin();it<G[N].end();it++)
{
if(viz[it->lg])
{
for(jt=G[it->lg].begin();jt<G[it->lg].end();jt++)
{
if(jt->lg==N)
break;
}
fmin=jt->c-jt->f;
for(i=it->lg;i!=1;i=ante[i])
{
for(jt=G[ante[i]].begin();jt<G[ante[i]].end();jt++)
{
if(jt->lg==i)
break;
}
fmin=min(fmin,jt->c-jt->f);
}
for(jt=G[it->lg].begin();jt<G[it->lg].end();jt++)
{
if(jt->lg==N)
break;
}
jt->f+=fmin;
it->f-=fmin;
for(i=it->lg;i!=1;i=ante[i])
{
for(jt=G[ante[i]].begin();jt<G[ante[i]].end();jt++)
{
if(jt->lg==i)
break;
}
jt->f+=fmin;
for(jt=G[i].begin();jt<G[i].end();jt++)
{
if(jt->lg==ante[i])
break;
}
jt->f-=fmin;
}
flow+=fmin;
// cout<<fmin<<" ";
}
}
}
fout<<flow<<"\n";
}
void cit()
{
ifstream fin("maxflow.in");
int i,x,y,z;
fin>>N>>M;
for(i=1;i<=M;i++)
{
fin>>x>>y>>z;
G[x].pb((nod){y,z,0});
G[y].pb((nod){x,0,0});
}
fin.close();
}
int main()
{
cit();
solve();
fout.close();
return 0;
}