Pagini recente » Cod sursa (job #990199) | Cod sursa (job #1060755) | Cod sursa (job #2624169) | Cod sursa (job #173438) | Cod sursa (job #1418475)
#include<bits/stdc++.h>
using namespace std;
struct cell
{
int nod,flow,ind;
};
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int NMAX=1005;
int n,m,sol,ad[NMAX],fl[NMAX];
int nxtf[NMAX],nxtn[NMAX];
vector<cell>v[NMAX];
bitset<NMAX>viz;
void DFS(int x)
{
viz[x]=1;
for (vector<cell>::iterator it=v[x].begin();it!=v[x].end();it++)
if (!viz[(*it).nod] && ad[(*it).ind]<fl[(*it).ind])
{
nxtf[(*it).nod]=(*it).ind;
nxtn[(*it).nod]=x;
DFS((*it).nod);
}
}
int main()
{
int i,x,kkt,mn;
bool ok;
cell k;
fin>>n>>m;
for (i=1;i<=m;i++)
{
k.ind=i;
fin>>x>>k.nod>>k.flow;
fl[i]=k.flow;
v[x].push_back(k);
}
ok=1;
while (ok==1)
{
ok=0;
for (i=1;i<=n;i++) {viz[i]=0;nxtf[i]=nxtn[i]=0;}
DFS(1);
if (nxtf[n]!=0)//avem drum
{
ok=1;
kkt=n;mn=1<<30;
while (kkt>1)
{
mn=min(mn,fl[nxtf[kkt]]-ad[nxtf[kkt]]);
kkt=nxtn[kkt];
}
kkt=n;
while (kkt>1)
{
ad[nxtf[kkt]]+=mn;
kkt=nxtn[kkt];
}
}
}
for (i=0;i<v[1].size();i++) sol+=ad[v[1][i].ind];
fout<<sol<<"\n";
return 0;
}