Pagini recente » Cod sursa (job #2347937) | Cod sursa (job #2170282) | Cod sursa (job #236098) | Cod sursa (job #1441521) | Cod sursa (job #854006)
Cod sursa(job #854006)
#include<fstream.h>
ifstream fin("date.in");
ofstream fout("date.out");
const int maxn=10010,inf=999999999;
int n,m,p,u,nrd=1,flux;
int v[maxn],t[maxn],cc[maxn];
int f[maxn][maxn];
void cit()
{
int i,x,y,cost;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
f[x+1][y+1]=1;
f[1][x+1]=1;
f[y+1][n+2]=1;
}
n+=2;
}
int drum()
{
int i,nod;
p=u=1; cc[1]=1; v[1]=nrd; t[1]=0;
while(p<=u)
{
nod=cc[p];
if(nod==n) {p++;continue;}
for(i=1;i<=n;i++)
if(f[nod][i]>0 && v[i]!=nrd)
{
u++;
cc[u]=i;
t[i]=nod;
v[i]=nrd;
}
p++;
}
return v[n];
}
void flux_max()
{
int i,k,min;
while(drum()==nrd)
{
for(k=1;k<=n;k++)
if(f[k][n]>0 && v[k]==nrd)
{
t[n]=k;
min=999999;
for(i=n;t[i]!=0;i=t[i])
if(min>f[t[i]][i])
min=f[t[i]][i];
for(i=n;t[i]!=0;i=t[i])
{
f[t[i]][i]-=min;
f[i][t[i]]+=min;
}
flux+=min;
}
nrd++;
}
}
int main()
{
cit();
flux_max();
fout<<flux;
fin.close();
fout.close();
return 0;
}