Pagini recente » Cod sursa (job #1119607) | Cod sursa (job #790548) | Cod sursa (job #1254046) | Cod sursa (job #359974) | Cod sursa (job #254001)
Cod sursa(job #254001)
#include<stdio.h>
#include<vector>
using namespace std;
const int N=1002;
vector < int > dest[N];
vector < int >::iterator it;
int flx[N][N],flux;
int cap[N][N];
int sursa, destinatie;
int parent[N];
int que[N],begin,end,nod;
int n;
bool bfs()
{
begin=0; end=1;
que[0]=sursa;
memset(parent,0,sizeof(parent));
while(begin<end)
{
if(que[begin]==N){ ++begin; continue; }
for(it=dest[que[begin]].begin();it!=dest[que[begin]].end();++it)
{
if(parent[*it] || flx[que[begin]][*it]==cap[que[begin]][*it]) continue;
que[end]=*it;
++end;
parent[*it]=que[begin];
}
++begin;
}
return parent[destinatie];
}
void comp_flux()
{
int min;
while(bfs())
{
for(it=dest[destinatie].begin();it!=dest[destinatie].end();++it)
{
if(!parent[*it]||cap[*it][destinatie]==flx[*it][destinatie])
continue;
min = 0x3f3f3f3f;
parent[destinatie]=*it;
for(nod=destinatie;nod!=sursa;nod=parent[nod])
if(cap[parent[nod]][nod]-flx[parent[nod]][nod]<min)
min=cap[parent[nod]][nod]-flx[parent[nod]][nod];
for(nod=destinatie;nod!=sursa;nod=parent[nod])
{
flx[parent[nod]][nod]+=min;
flx[nod][parent[nod]]-=min;
}
flux+=min;
}
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int m;
int i;
int v1,v2,k;
scanf("%d%d",&n,&m);
for(i=0;i<m;++i)
{
scanf("%d%d%d",&v1,&v2,&k);
dest[v1].push_back(v2);
dest[v2].push_back(v1);
cap[v1][v2]=k;
}
sursa=1;
destinatie=n;
flux=0;
comp_flux();
printf("%d\n",flux);
return 0;
}