Pagini recente » Cod sursa (job #2807208) | Cod sursa (job #2822271) | Cod sursa (job #1844815) | Cod sursa (job #3257588) | Cod sursa (job #407435)
Cod sursa(job #407435)
using namespace std;
#define MAX 10006
#include<cstdio>
struct nod{
int info;
nod *next;
};
nod *G[MAX];
int n,m,nrcuplaj,u[MAX],R[MAX],L[MAX];
void citire()
{
int e,a,b;
scanf("%d %d %d", &n, &m, &e);
for(int i=1;i<=e;i++)
{
scanf("%d %d", &a, &b);
nod *p=new nod;
p->info=b;
p->next=G[a];
G[a]=p;
}
}
void write()
{
printf("%d\n",nrcuplaj);
for(int i=1;i<=n;i++)
if(L[i])
printf("%d %d\n",i,L[i]);
}
int pereche(int x)
{
if(u[x]==1)
return 0;
u[x]=1;
for(nod *p=G[x]; p ; p=p->next)
{
int i=p->info;
if(R[i]==0 || pereche(R[i]))
{
L[x]=i,R[i]=x;
return 1;
}
}
return 0;
}
void cuplaj()
{
int gata=0,i;
while(!gata)
{
gata=1;
for(i=1;i<=n;i++)
u[i]=0;
for(i=1;i<=n;i++)
if(L[i]==0)
if(pereche(i)==1)
nrcuplaj++, gata=0;
}
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
citire();
cuplaj();
write();
return 0;
}