Pagini recente » Cod sursa (job #2559402) | Cod sursa (job #2652072) | Cod sursa (job #834910) | Cod sursa (job #2514756) | Cod sursa (job #1491423)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int> g[10002];
vector<int> cd;
vector<int>::iterator it;
int n,t[10002],ans,mn,x,y,m,i,c[1002][1002],f[1002][1002],nod;
bool sel[1002];
bool bf()
{
int i,nod;
vector<int>::iterator j;
cd.push_back(1);
memset(sel,false,sizeof(sel));
sel[1]=true;
for(i=0;i<cd.size();i++)
{
x=cd[i];
if(x==n)
{
continue;
}
for(j=g[nod].begin();j!=g[nod].end();j++)
{
if(!sel[*j]||c[nod][*j]==f[nod][*j])
{
continue;
}
cd.push_back(*j);
sel[*j]=nod;
t[*j]=nod;
}
}
cd.clear();
return sel[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
while(bf())
{
for(it=g[n].begin();it!=g[n].end();it++)
{
nod=*it;
if(f[nod][n]==c[nod][n]||!sel[nod])
{
continue;
}
t[n]=nod;
mn=2136732;
for(nod=n;nod!=1;nod=t[nod])
{
mn=min(mn,c[t[nod]][nod]-f[t[nod]][nod]);
}
if(mn==0)
{
continue;
}
for(nod=n;nod!=1;nod=t[nod])
{
f[t[nod]][nod]+=mn;
f[nod][t[nod]]-=mn;
}
ans+=mn;
}
}
printf("%d\n",ans);
return 0;
}