Pagini recente » Diferente pentru utilizator/turist123 intre reviziile 5 si 9 | Monitorul de evaluare | Istoria paginii utilizator/andreigabriel.01 | Cod sursa (job #3146064)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<pair<int, int> > x[1001];
int n, maxf, p[1001];
void BFS()
{queue<int> q;
int a;
q.push(1);
while(q.empty()!=1)
{a=q.front();
vector<pair<int, int> >:: iterator I;
for(I=x[a].begin();I<x[a].end();I++)
if(p[I->first]==0 && I->second!=0)
{p[I->first]=p[a]+1;
q.push(I->first);
}
q.pop();
}
}
int DFS(int nod, int mini)
{//cout<<nod<<" ";
if(nod==n)
{maxf+=mini;
return mini;
}
vector<pair<int, int> >:: iterator I;
for(I=x[nod].begin();I<x[nod].end();I++)
if(p[I->first]>p[nod] && I->second!=0)
{int a=DFS(I->first, min(mini, I->second));
if(a!=-1)
{I->second-=a;
if(nod!=1)return a;
}
}
return -1;
}
int main()
{ int m, a, b, c, t=0;
fin>>n>>m;
for(int i=1;i<=m;i++)
{fin>>a>>b>>c;
x[a].push_back({b, c});
}
c=0;
while(t==0)
{t=1;
for(int i=1;i<=n;i++)
p[i]=0;
BFS();
DFS(1, 2e9);//cout<<endl;
if(c!=maxf)t=0;
c=maxf;
}
fout<<maxf;
return 0;
}