Pagini recente » Cod sursa (job #2966588) | Cod sursa (job #197435) | Cod sursa (job #1426252) | Cod sursa (job #2577126) | Cod sursa (job #2606466)
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int DN=1005;
int n,m,f,g;
int dist[DN],viz[DN],pr[DN],c[DN][DN],flow[DN][DN];
long long sol;
vector<int>v[DN];
queue<int>q;
int bfs(int s,int d)
{
for(int i=0;i<=n;i++)
viz[i]=0;
viz[s]=1;
q.push(s);
while(!q.empty())
{
int nod=q.front();
q.pop();
//cout<<nod<<'\n';
for(auto i:v[nod])
if(flow[nod][i]<c[nod][i]&&!viz[i])
{
viz[i]=1;
pr[i]=nod;
q.push(i);
}
}
return viz[d];
}
void solve(int s,int d)
{
while(bfs(s,d))
{
// cout<<'z'<<'\n';
for(auto i:v[d])
if(viz[i])
{
pr[d]=i;
int z=d,mi=2e9;
while(z!=s&&mi!=0)
{
int f=pr[z];
int g=z;
mi=min(mi,c[f][g]-flow[f][g]);
z=pr[z];
}
if(mi==0)
continue;
z=d;
sol+=mi;
while(z!=s)
{
int f=pr[z];
int g=z;
flow[f][g]+=mi;
flow[g][f]-=mi;
z=pr[z];
}
}
}
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>f>>g;
fin>>c[f][g];
v[f].pb(g);
v[g].pb(f);
}
solve(1,n);
fout<<sol;
}