Pagini recente » Cod sursa (job #288802) | Cod sursa (job #513277) | Cod sursa (job #2416582) | Cod sursa (job #1079782) | Cod sursa (job #2708472)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N=501;
const int M=1000;
struct muchie
{
int x,y,c;
};
muchie v[M+M];
vector <int> a[N];
int m,n,pred[N];
int val_flux()
{
int val=v[pred[n]].c;
int x=n;
while (x!=1)
{
int i=pred[x];
val=min(val,v[i].c);
x=v[i].x+v[i].y-x;
}
return val;
}
void init_pred()
{
for (int i=1;i<=n;i++)
{
pred[i]=-1;
}
}
bool bfs()
{
bool rez=false;
init_pred();
queue<int> q;
q.push(1);
while (!q.empty())
{
int x=q.front();
q.pop();
for (auto i: a[x])
{
if (v[i].c>0)
{
int y=v[i].x+v[i].y-x;
if (pred[y]!=-1)
{
continue;
}
pred[y]=i;
q.push(y);
if (y==n)
{
rez=true;
}
}
}
}
return rez;
}
long long flux()
{
long long f=0;
while (bfs())
{
int fc=val_flux();
f+=fc;
int x=n;
while (x != 1)
{
int i=pred[x];
x=v[i].x+v[i].y-x;
v[i].c-=fc;
int j=i+m;
if (j>=2*m)
{
j=i-m;
}
v[j].c+=fc;
}
}
return f;
}
int main()
{
cin>>n>>m;
for (int i=0;i<m;i++)
{
cin>>v[i].x>>v[i].y>>v[i].c;
v[i+m].x=v[i].y;
v[i+m].y=v[i].x;
v[i+m].c=0;
a[v[i].x].push_back(i);
a[v[i].y].push_back(i+m);
}
cout<<flux();
return 0;
}