Pagini recente » Cod sursa (job #1344375) | Cod sursa (job #1713091) | Cod sursa (job #1398839) | Cod sursa (job #15329) | Cod sursa (job #308567)
Cod sursa(job #308567)
#include <cstdio>
#include <cstring>
struct node{
node* next;
int val;
};
int n,m;
int r[10000],l[10000];
char u[10000];
node* v[10000];
int link(int x){
if(u[x])
return 0;
u[x]=1;
node* tmp;
for(tmp=v[x];tmp;tmp=tmp->next)
if(!r[tmp->val]||link(r[tmp->val])){
l[x]=tmp->val;
r[tmp->val]=x;
return 1;
}
return 0;
}
int main(){
freopen("cuplaj.in","rt",stdin);
freopen("cuplaj.out","wt",stdout);
int a,b,e;
node* tmp;
scanf("%d%d%d",&m,&n,&e);
for(;e--;){
scanf("%d%d",&a,&b);
tmp=new node;
tmp->val=b;
tmp->next=v[a];
v[a]=tmp;
}
a=0;
while(!a){
a=1;
memset(u,0,sizeof(u));
for(b=1;b<=m;b++)
if(!l[b])
if(link(b))
a=0;
}
for(a=1,b=0;a<=m;a++)
if(l[a])
b++;
printf("%d\n",b);
for(a=1;a<=m;a++)
if(l[a])
printf("%d %d\n",a,l[a]);
return 0;
}