Pagini recente » Cod sursa (job #636065) | Cod sursa (job #893662) | Cod sursa (job #2666989) | Cod sursa (job #2520803) | Cod sursa (job #2522138)
#include <bits/stdc++.h>
///Edmonds-Karp
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;
bool ok = 0;
q.push(1);
viz[1] = 1;
int minn = INT_MAX;
while(!q.empty() && !ok)
{
int cur = q.front();
q.pop();
for(auto it:v[cur])
if(!viz[it] && c[cur][it]-f[cur][it] > 0)
{
if(it == n)
{
ok = 1;
p[n] = cur;
minn = min(minn, c[cur][it]-f[cur][it]);
}
p[it] = cur;
viz[it] = 1;
q.push(it);
minn = min(minn, c[cur][it]-f[cur][it]);
}
}
if(!ok)
break;
int nod = n;
while(p[nod])
{
f[p[nod]][nod]+=minn;
f[nod][p[nod]]-=minn;
nod = p[nod];
}
}
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;
}
}