Pagini recente » Cod sursa (job #2172329) | Cod sursa (job #2676704) | Cod sursa (job #2506141) | Rezultatele filtrării | Cod sursa (job #1980341)
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int C[1001][1001];
int F[1001][1001];
int t[1001];
bool viz[1001];
queue <int> q;
list <int> G[1001];
int n;
bool BFS()
{
int x;
list <int> :: iterator it;
q.push(1);
fill(viz+1,viz+n+1,false);
viz[1]=true;
while(!q.empty())
{
x=q.front();
q.pop();
if(x==n) continue;
for(it=G[x].begin();it!=G[x].end();it++)
if(!viz[*it] and C[x][*it]!=F[x][*it])
{
viz[*it]=true;
q.push(*it);
t[*it]=x;
}
}
return viz[n];
}
void Edmonds_Karp()
{
int flow=0,minflow;
int nod;
list <int> :: iterator it;
while(BFS())
{
for(it=G[n].begin();it!=G[n].end();it++)
if(viz[*it] and C[*it][n]!=F[*it][n])
{
nod=n;
t[n]=*it;
minflow=2e9+1;
while(nod!=1)
{
if(C[t[nod]][nod]-F[t[nod]][nod]<minflow)
minflow=C[t[nod]][nod]-F[t[nod]][nod];
nod=t[nod];
}
nod=n;
while(nod!=1)
{
F[t[nod]][nod]+=minflow;
F[nod][t[nod]]-=minflow;
nod=t[nod];
}
flow+=minflow;
}
}
g<<flow;
}
int main()
{
int m,k,i,j,c;
f>>n>>m;
for(k=1;k<=m;k++)
{
f>>i>>j>>c;
C[i][j]=c;
G[i].push_back(j);
G[j].push_back(i);
}
Edmonds_Karp();
return 0;
}