Pagini recente » Cod sursa (job #33608) | Cod sursa (job #1338988) | Cod sursa (job #2157669) | Cod sursa (job #2827908) | Cod sursa (job #241602)
Cod sursa(job #241602)
#include <cstdio>
#include <memory>
struct nod
{
int inf;
nod *urm;
};
typedef nod *lista;
lista g[10001],p;
int k,m,n,x,y;
int fol[10001], lst[10002], sir[10002];
void baga(int x, int y)
{
p=new nod;
p->inf=y;
p->urm=g[x];
g[x]=p;
}
int check(int n)
{
if(fol[n])
return 0;
fol[n]=1;
lista k=new nod;
for(k=g[n];k;k=k->urm)
if(!lst[k->inf])
{
lst[k->inf]=n;
sir[n]=k->inf;
return 1;
}
for(k=g[n];k;k=k->urm)
if(check(lst[k->inf]))
{
lst[k->inf]=n;
sir[n]=k->inf;
return 1;
}
return 0;
}
void exec()
{
int nr=0;
bool da=1;
while(da)
{
da=0;
memset(fol,0,sizeof(fol));
for(int i=1;i<=n;++i)
if(!sir[i])
if(check(i))
{
nr++;
da=1;
}
}
printf("%d\n",nr-1);
for(int i=1;i<=n;++i)
if(sir[i])
printf("%d %d\n",i,sir[i]);
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d\n",&n,&m,&k);
for(int i=0;i<k;i++)
{
scanf("%d %d\n",&x,&y);
baga(x,y);
}
exec();
fclose(stdout);
return 0;
}