Pagini recente » Cod sursa (job #1978478) | Cod sursa (job #541542) | Cod sursa (job #809693) | Cod sursa (job #1024181) | Cod sursa (job #2416681)
#include <bits/stdc++.h>
using namespace std;
const int inf=1e9;
queue<int> q;
char vaz[1010];
int cap[1010][1010],tata[1010],n;
vector<int> v[1001];
int bfs()
{
memset(vaz,0,sizeof(vaz));
vaz[1]=1;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(int i=0;i<v[nod].size();i++)
{
int vec=v[nod][i];
if(vaz[vec] or !cap[nod][vec]) continue;
vaz[vec]=1;
tata[vec]=nod;
if(vec!=n) q.push(vec);
}
}
return vaz[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int m,x,y,c,flow=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
cap[x][y]=c;
v[x].push_back(y);
v[y].push_back(x);
}
while(bfs())
for(int i=0;i<v[n].size();i++)
{
int vec=v[n][i];
if(!vaz[vec] or !cap[vec][n]) continue;
int s=inf;
tata[n]=vec;
for(int nod=n;nod!=1;nod=tata[nod]) s=min(s,cap[tata[nod]][nod]);
for(int nod=n;nod!=1;nod=tata[nod])
{
cap[tata[nod]][nod]-=s;
cap[nod][tata[nod]]+=s;
}
flow+=s;
}
printf("%d",flow);
return 0;
}