Pagini recente » Cod sursa (job #1584808) | Cod sursa (job #2222161) | Cod sursa (job #3277497) | Cod sursa (job #258396) | Cod sursa (job #2395968)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,x,y,val,ans;
int c[1005][1005];
int f[1005][1005];
int father[1005];
vector<int>nod[1005];
int bfs()
{
for(int i=2;i<=n;i++)
father[i]=-1;
queue<int>q;
q.push(1);
while(!q.empty())
{
int pos=q.front();
q.pop();
for(int i=0;i<nod[pos].size();i++)
{
if(father[nod[pos][i]]!=-1 || c[pos][nod[pos][i]]==f[pos][nod[pos][i]])
continue;
father[nod[pos][i]]=pos;
q.push(nod[pos][i]);
}
}
if(father[n]==-1)
return 0;
int rez=0;
for(int i=0;i<nod[n].size();i++)
{
int flux=c[nod[n][i]][n]-f[nod[n][i]][n];
int pos=nod[n][i];
while(father[pos]!=0 && flux>0)
{
flux=min(flux,c[father[pos]][pos]-f[father[pos]][pos]);
pos=father[pos];
}
if(flux==0)continue;
f[nod[n][i]][n]+=flux;
f[n][nod[n][i]]-=flux;
pos=nod[n][i];
while(father[pos]!=0)
{
f[father[pos]][pos]+=flux;
f[pos][father[pos]]-=flux;
pos=father[pos];
}
rez+=flux;
}
return rez;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>val;
c[x][y]=val;
nod[x].push_back(y);
nod[y].push_back(x);
}
val=1;
while(val)
{
val=bfs();
ans+=val;
}
fout<<ans;
return 0;
}