Pagini recente » Cod sursa (job #1592604) | Cod sursa (job #426303) | Cod sursa (job #1818833) | Cod sursa (job #3239054) | Cod sursa (job #782744)
Cod sursa(job #782744)
#include<stdio.h>
#define dim 10010
FILE*f=fopen("cuplaj.in","r");
FILE*g=fopen("cuplaj.out","w");
struct nod{
int nr;
nod *adr;
}*c,*p,*L[dim];
int i,n,m,e,a,b,s,C[2*dim];
void read(){
fscanf(f,"%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++){
fscanf(f,"%d%d",&a,&b);
p=new nod;
p->nr=n+b;
p->adr=L[a];
L[a]=p;
p=new nod;
p->nr=a;
p->adr=L[n+b];
L[n+b]=p;
}
}
void decupleaza(int x){
if(C[x]==0)
return;
nod *q=L[x];
while(q){
if(C[x]==q->nr){
q=q->adr;
continue;
}
decupleaza(q->nr);
if(C[q->nr]==0){
C[C[x]]=0;
C[x]=q->nr;
C[q->nr]=x;
return;
}
q=q->adr;
}
}
int main(){
read();
for(i=1;i<=n;i++){
c=L[i];
while(c){
if(C[c->nr]==0){
C[i]=c->nr;
C[c->nr]=i;
break;
}
c=c->adr;
}
}
for(i=1;i<=n;i++){
if(C[i]==0){
c=L[i];
while(c){
decupleaza(C[c->nr]);
if(C[c->nr]==0){
C[i]=c->nr;
C[c->nr]=i;
break;
}
c=c->adr;
}
}
}
for(i=1;i<=n;i++){
if(C[i])
s++;
}
fprintf(g,"%d\n",s);
for(i=1;i<=n;i++)
if(C[i])
fprintf(g,"%d %d\n",i,C[i]-n);
return 0;
}