Pagini recente » Cod sursa (job #2156335) | Cod sursa (job #2731499) | Cod sursa (job #1320273) | Cod sursa (job #614905) | Cod sursa (job #962240)
Cod sursa(job #962240)
#include<stdio.h>
#include<vector>
using namespace std;
int L,R,E,x,y,v[22000],l[11000],r[11000];
vector<int> a[22000];
int pairup(int x)
{
if(v[x])
return 0;
v[x]=1;
int y=a[x].size();
for(int i=0;i<y;++i)
if(r[a[x][i]]==0)
{
l[x]=a[x][i];
r[a[x][i]]=x;
return 1;
}
for(int i=0;i<y;++i)
if(pairup(r[a[x][i]])==1)
{
l[x]=a[x][i];
r[a[x][i]]=x;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&L,&R,&E);
for(int i=1;i<=E;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
}
int ok=1;
while(ok)
{
ok=0;
for(int i=1;i<=L;++i)
v[i]=0;
for(int i=1;i<=L;++i)
{
if(l[i]==0)
if(pairup(i)==1)
ok=1;
}
}
int nr=0;
for(int i=1;i<=L;++i)
if(l[i])
++nr;
printf("%d\n",nr);
for(int i=1;i<=L;++i)
if(l[i])
printf("%d %d\n",i,l[i]);
return 0;
}