Pagini recente » Cod sursa (job #1876081) | Cod sursa (job #763296) | Cod sursa (job #2671200) | Cod sursa (job #3264423) | Cod sursa (job #2522154)
#include <bits/stdc++.h>
///Edmonds-Karp optimizat
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int n, m;
int f[1005][1005], c[1005][1005], p[1005];
vector<int> v[1005];
bitset<1005> viz;
void read();
int main()
{
read();
while(true)
{
queue<int> q;
for(int i=2; i<=n; i++)
viz[i] = 0;
q.push(1);
viz[1] = 1;
int minn = INT_MAX;
while(!q.empty())
{
int cur = q.front();
q.pop();
for(auto it:v[cur])
if(!viz[it] && c[cur][it]-f[cur][it] > 0)
{
viz[it] = 1;
p[it] = cur;
if(it!=n)
q.push(it);
}
}
if(!viz[n])
break;
for(auto it:v[n])
if(viz[it] && c[it][n]-f[it][n] > 0)
{
int nod = n;
minn = INT_MAX;
p[n] = it;
vector<pair<int,int>> aux;
while(p[nod])
{
minn = min(minn, c[p[nod]][nod]-f[p[nod]][nod]);
aux.push_back(pair<int,int>(p[nod], nod));
nod = p[nod];
}
for(auto i:aux)
{
f[i.first][i.second]+=minn;
f[i.second][i.first]-=minn;
}
}
}
int s = 0;
for(auto it:v[1])
s+=f[1][it];
fout << s;
return 0;
}
void read()
{
fin >> n >> m;
for(int i=1; i<=m; i++)
{
int x, y, ca;
fin >> x >> y >> ca;
v[x].push_back(y);
v[y].push_back(x);
c[x][y] = ca;
}
}