Pagini recente » Cod sursa (job #304541) | Cod sursa (job #1925793) | Cod sursa (job #2803509) | Cod sursa (job #1527057) | Cod sursa (job #854161)
Cod sursa(job #854161)
#include<fstream>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int maxn=20010,inf=999999999;
int n1,n2,n,m;
int p,u,nrd=1,flux;
int v[maxn],t[maxn],cc[maxn];
int f[maxn][maxn];
void cit()
{
int i,x,y,cost;
fin>>n1>>n2>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
f[x+1][y+n1+1]=1;
f[1][x+1]=1;
f[y+n1+1][n1+n2+2]=1;
}
n=n1+n2+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) return 1;
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 0;
}
void flux_max()
{
int i,k;
while(drum())
{
for(i=n;t[i]!=0;i=t[i])
{
f[t[i]][i]--;
f[i][t[i]]++;
}
flux++;
nrd++;
}
}
void afis()
{
int i,j;
int l1=n1+1,l2=n1+2,l3=n1+n2+1;
for(i=2;i<=l1;i++)
for(j=l2;j<=l3;j++)
if(f[j][i]>0)
fout<<i-1<<" "<<j-n1-1<<'\n';
}
int main()
{
cit();
flux_max();
fout<<flux<<'\n';
afis();
fin.close();
fout.close();
return 0;
}