Pagini recente » Cod sursa (job #1898847) | Cod sursa (job #1629213) | Cod sursa (job #1180292) | Cod sursa (job #2137318) | Cod sursa (job #2101031)
#include <bits/stdc++.h>
using namespace std;
ifstream F("maxflow.in");
ofstream G("maxflow.out");
int t[1002], c[1002][1002], f[1002][1001], x, y, z, n, m, Fmin, flux;
bitset<1002> v;
vector<int> a[1002];
queue<int> q;
const int inf = 1 << 30;
int bfs()
{
vector<int> :: iterator it;
v=0;
v[1] = 1;q.push(1);
while(!q.empty())
{
x = q.front(); q.pop();
if(x==n) continue;
for(it = a[x].begin(); it != a[x].end(); ++ it)
{
if(v[*it] || c[x][*it]==f[x][*it]) continue;
t[*it] = x;
v[*it] = 1;
q.push(*it);
}
}
return v[n];
}
int main()
{
F >> n >> m;
for(int i = 1; i <= m; ++ i)
{
F >> x >> y >> z;
c[x][y] = z;
a[x].push_back(y);
a[y].push_back(x);
}
vector<int> :: iterator it;
while(bfs())
for(it = a[n].begin(); it != a[n].end(); ++ it)
{
if(!v[*it] || c[*it][n] == f[*it][n]) continue;
t[n] = *it;
Fmin = inf;
for(int i = n; i > 1; i = t[i]) Fmin = min(Fmin, c[t[i]][i]-f[t[i]][i]);
if(!Fmin) continue;
for(int i = n; i > 1; i = t[i]) f[t[i]][i] += Fmin, f[i][t[i]] -= Fmin;
flux += Fmin;
}
G << flux;
return 0;
}