Pagini recente » Cod sursa (job #2332862) | Cod sursa (job #1708808) | Cod sursa (job #2284660) | Cod sursa (job #2620414) | Cod sursa (job #2164325)
#include <fstream>
#include <vector>
#include <queue>
#define nmax 1002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
queue <int> coada;
vector <int> graf[nmax];
int cost[nmax][nmax],oto[nmax],viz[nmax],sol[nmax],flux,n,m,val,x,y;
int bfs()
{
while(!coada.empty())
coada.pop();
coada.push(1);
viz[1]=1;
while(!coada.empty())
{
int nod=coada.front();
coada.pop();
int lg=graf[nod].size();
for(int i=0;i<lg;i++)
{
if(cost[nod][graf[nod][i]]&&viz[graf[nod][i]]==0)
{
oto[graf[nod][i]]=nod;
coada.push(graf[nod][i]);
viz[graf[nod][i]]=1;
if(graf[nod][i]==n)
return 1;
}
}
}
return 0;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>val;
graf[x].push_back(y);
cost[x][y]=val;
}
while(bfs())
{
int nods=n;
int cnt=0;
while(oto[nods])
{
sol[++cnt]=nods;
nods=oto[nods];
}
int mini=10000002;
sol[++cnt]=1;
for(int i=cnt;i>1;i--)
mini=min(mini,cost[sol[i]][sol[i-1]]);
flux+=mini;
for(int i=cnt;i>1;i--)
{
cost[sol[i]][sol[i-1]]-=mini;
}
for(int i=1;i<=n;i++)
viz[i]=0;
}
fout<<flux;
return 0;
}