Pagini recente » Cod sursa (job #2852842) | Cod sursa (job #517828) | Cod sursa (job #2261468) | Cod sursa (job #2259071) | Cod sursa (job #2406804)
#include <stdio.h>
#include <string.h>
using namespace std;
bool ok,viz[20005];
int x,y, l,r,e,dr[20005],st[20005];
int i,j;
struct nd{
int inf;
nd *urm;
} *l8[20005];
void adaug(nd *&u,int x){
nd *p;
p=new nd;
p->urm=u;
p->inf=x;
u=p;
}
int pairup(int nod){
int i,vec;
if(viz[nod]) return 0;
viz[nod]=1;
for(nd *j=l8[nod];j;j=j->urm){
vec=j->inf;
if(!dr[vec]||pairup(dr[vec]))
{
dr[vec]=nod;
st[nod]=vec;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&l,&r,&e);
for(i=1;i<=e;i++){
scanf("%d%d",&x,&y);
adaug(l8[y],x);
}
ok=1;
while(ok){
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=r;i++)
if(!st[i])
ok=ok|pairup(i);
}
int s;
s=0;
for(i=1;i<=r;i++) if(st[i]) s++;
printf("%d\n",s);
for(i=1;i<=r;i++) if(st[i]) printf("%d %d\n",st[i],i);
return 0;
}