Pagini recente » Cod sursa (job #1431803) | Cod sursa (job #622923) | Cod sursa (job #787000) | Cod sursa (job #839322) | Cod sursa (job #238862)
Cod sursa(job #238862)
using namespace std;
#include <algorithm>
#include <cstdio>
#include <string>
#define N 1001
int cap[N][N];
struct nod { int x; nod *n;};
nod *a[N];
int n, m;
int t[N];
inline int bfs()
{
int Q[N], p=0, q=0;
bool use[N];
int d[N];
memset(use, 0, sizeof(use));
memset(t, 0, sizeof(t));
memset(d, 0, sizeof(d));
use[1]=1;
Q[0]=1;
while(p<=q)
{
int u=Q[p++];
for(nod *i=a[u]; i; i=i->n)
if(!use[i->x])
if(cap[u][i->x] > 0)
{
Q[++q]=i->x;
use[i->x]=1;
t[i->x]=u;
d[i->x]=d[u] + 1;
}
}
if(t[n] == 0) return 0;
return 1;
}
void solve()
{
int flow=0;
while(bfs())
{
for(nod *i=a[n]; i; i=i->n)
if(t[i->x])
{
int mn=0x3f3f3f3f;
for(int j=i->x; t[j]; j=t[j])
mn=min(mn, cap[t[j]][j]);
mn=min(mn, cap[i->x][n]);
if(mn <= 0) continue;
cap[i->x][n]-=mn;
cap[n][i->x]+=mn;
for(int j=i->x; t[j]; j=t[j])
cap[t[j]][j]-=mn,
cap[j][t[j]]+=mn;
flow+=mn;
}
}
printf("%d\n", flow);
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d\n", &n, &m);
while(m--)
{
int p,q,c;
scanf("%d %d %d\n", &p, &q,&c);
nod *t=new nod;
t->x=q;
t->n=a[p];
a[p]=t;
t=new nod;
t->x=p;
t->n=a[q];
a[q]=t;
cap[p][q]=c;
}
solve();
return 0;
}