Pagini recente » Cod sursa (job #2091007) | Cod sursa (job #261841) | Cod sursa (job #361868) | Cod sursa (job #756761) | Cod sursa (job #2874852)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m;
vector<int> a[1005];
int capacity[1005][1005],flux[1005][1005],t[1005];
bool viz[1005];
bool bfs()
{
memset(viz,0,sizeof(viz));
viz[1]=1;
queue<int> q;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
if(nod==n) continue;
for(int j=0;j<a[nod].size();j++)
{
int x=a[nod][j];
if(!viz[x] && capacity[nod][x]!=flux[nod][x])
{
t[x]=nod;
q.push(x);
viz[x]=1;
}
}
}
if(viz[n]==0) return 0;
return 1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c;
fin>>x>>y>>c;
a[x].push_back(y);
a[y].push_back(x);
capacity[x][y]+=c;
}
int sol=0;
while(bfs())
{
for(int j=0;j<a[n].size();j++)
{
int x=a[n][j];
if(viz[x] && capacity[x][n]!=flux[x][n])
{
int cnt=1e9;
t[n]=x;
for(int i=n;i>1;i=t[i])cnt=min(cnt,capacity[t[i]][i]-flux[t[i]][i]);
for(int i=n;i>1;i=t[i])
{
flux[t[i]][i]+=cnt;
flux[i][t[i]]-=cnt;
}
sol+=cnt;
}
}
}
fout<<sol;
return 0;
}