Pagini recente » Cod sursa (job #142237) | Cod sursa (job #26092) | Cod sursa (job #2250752) | Cod sursa (job #1612151) | Cod sursa (job #1968155)
#include<bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
unsigned int n,m,s,d;
int c[1001][1001];
int t[1001];
queue<int> q;
vector <int> v[1001];
int bf()
{ unsigned int i,j,k;
memset(t,0,sizeof(t));
t[1]=-1;
q.push(1); int ok=0;
while(q.size())
{
i=q.front();
q.pop();
for( k=0;k<v[i].size();k++)
{
j=v[i][k];
if(t[j]==0&&c[i][j]>0)
{
t[j]=i;
if(j!=n)
{
q.push(j);
}
}
}
}
if(t[n]) return 1;
return 0;
}
int flux_maxim()
{
int flux=0;
int minn,i;
while(bf())
{
for(auto j:v[n])
if(t[j])
{
t[n]=j;
minn=200000;
j=n;
while(j!=1)
{
if(c[t[j]][j]<minn)
minn=c[t[j]][j];
j=t[j];
}
j=n;
while(j!=1)
{
c[t[j]][j]-=minn;
c[j][t[j]]+=minn;
j=t[j];
}
flux+=minn;
}
}
return flux;
}
int main()
{unsigned int i;
f>>n>>m;
for(i=1;i<=m;i++)
{
int x,y,ci;
f>>x>>y>>ci;
v[x].push_back(y);
v[y].push_back(x);
c[x][y]=ci;
}
g<<flux_maxim()<<'\n';
return 0;
}