Pagini recente » Cod sursa (job #2774342) | Cod sursa (job #2885735) | Cod sursa (job #2569419) | Cod sursa (job #237172) | Cod sursa (job #571697)
Cod sursa(job #571697)
#include<algorithm>
using namespace std;
#include<vector>
#include<queue>
#define DIM 1005
#define pb push_back
vector <int> lst[DIM];
int vol[DIM][DIM],f[DIM][DIM],n,m,t[DIM],sol;
bool v[DIM];
inline void read ()
{
int i,nr1,nr2,nr3;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&nr1,&nr2,&nr3);
vol[nr1][nr2]+=nr3;
lst[nr1].pb (nr2);
lst[nr2].pb (nr1);
}
}
inline bool bf ()
{
int i,nr;
queue <int> q;
for(i=1;i<=n;++i)
v[i]=0;
v[1]=1;
q.push(1);
while(!q.empty ())
{
nr=q.front ();
for(i=0;i<lst[nr].size ();++i)
if(vol[nr][lst[nr][i]]!=f[nr][lst[nr][i]] && v[lst[nr][i]]==0)
{
t[lst[nr][i]]=nr;
v[lst[nr][i]]=1;
if(lst[nr][i]!=n)
q.push(lst[nr][i]);
}
q.pop ();
}
return v[n];
}
inline void solve ()
{
int i,j,minim;
while(bf())
for(i=0;i<lst[n].size ();++i)
if(vol[lst[n][i]][n]!=f[lst[n][i]][n] && v[lst[n][i]]==1)
{
t[n]=lst[n][i];
minim=1<<30;
for(j=n;j!=1;j=t[j])
minim=min(minim,vol[t[j]][j]-f[t[j]][j]);
sol+=minim;
for(j=n;j!=1;j=t[j])
{
f[t[j]][j]+=minim;
f[j][t[j]]-=minim;
}
}
}
int main ()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
read ();
solve ();
printf("%d",sol);
return 0;
}