Pagini recente » Cod sursa (job #2634190) | Cod sursa (job #895607) | Cod sursa (job #2848165) | Cod sursa (job #2848171) | Cod sursa (job #2663899)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m;
vector<int> graf[1005];
int capacity[1005][1005],flux[1005][1005],previous[1005];
bool viz[1005];
bool bfs()
{
memset(viz,0,sizeof(viz));
viz[1]=1;
queue<int> q;
q.push(1);
while(!q.empty())
{
int node=q.front();
q.pop();
if(node==n) continue;
for(auto x:graf[node])
{
if(viz[x]==0 && capacity[node][x]!=flux[node][x])
{
previous[x]=node;
q.push(x);
viz[x]=1;
}
}
}
return (viz[n]);
}
int main()
{
for(int i=1;i<=m;i++)
{
int x,y,c;
in>>x>>y>>c;
graf[x].push_back(y);
graf[y].push_back(x);
capacity[x][y]+=c;
}
int ans=0;
while(bfs())
{
for(auto x:graf[n])
{
if(viz[x] && capacity[x][n]!=flux[x][n])
{
int minn=INT_MAX;
previous[n]=x;
for(int i=n;i>1;i=previous[i])
minn=min(minn,capacity[previous[i]][i]-flux[previous[i]][i]);
for(int i=n;i>1;i=previous[i])
{
flux[previous[i]][i]+=minn;
flux[i][previous[i]]-=minn;
}
ans+=minn;
}
}
}
out<<ans;
return 0;
}