Pagini recente » Cod sursa (job #2937505) | Cod sursa (job #2769237) | Cod sursa (job #696132) | Cod sursa (job #708827) | Cod sursa (job #387236)
Cod sursa(job #387236)
#include<fstream>
#define maxn 10005
struct nod
{
int info;
nod *next;
};
nod *g[maxn];
int n,m,i,l[maxn],r[maxn],u[maxn];
int pereche(int x)
{
if(u[x])
return 0;
u[x]=1;
for(nod *t=g[x];t;t=t->next)//caut perechea pt x
if(r[t->info]==0||pereche(r[t->info]))
{
l[x]=t->info;
r[t->info]=x;
return 1;
}
return 0;
}
int main()
{
int e,x,y;
nod *t;
FILE *in=fopen("cuplaj.in","r");
fscanf(in,"%d%d%d",&n,&m,&e);
for(;e;--e)
{
fscanf(in,"%d%d",&x,&y);
t=new nod;
t->info=y;
t->next=g[x];
g[x]=t;
}
fclose(in);
int cuplaj=0; //cuplajul maxim
int gata=0;
while(!gata)
{
gata=1;
for(i=1;i<=n;++i)
u[i]=0;
for (i=1;i<=n;++i)
if (l[i]==0)//daca nu are pereche
if (pereche(i))//caut perechea
{
++cuplaj;
gata=0;//ca la bubble sort
}
}
FILE *out=fopen("cuplaj.out","w");
fprintf(out,"%d\n", cuplaj);
for(i=1;i<=n;++i)
if (l[i])
fprintf(out,"%d %d\n", i, l[i]);
fclose(out);
return 0;
}