Pagini recente » Cod sursa (job #2082587) | Cod sursa (job #597774)
Cod sursa(job #597774)
#include<stdio.h>
#include<malloc.h>
#include<vector>
#define MaxN 10100
typedef struct _nod
{
int info;
struct _nod *adr;
} nod;
typedef struct
{
struct _nod *cap;
} list;
list A[MaxN];
bool viz[MaxN];
int st[MaxN];
int dr[MaxN];
int N;
int M;
int E;
int a;
int b;
int nr;
void add(int a,int b)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = b;
nou->adr = A[a].cap;
A[a].cap = nou;
}
void citire(void)
{
FILE *f = fopen("cuplaj.in","r");
fscanf(f,"%d %d %d",&N,&M,&E);
for(int i=1;i<=E;i++)
{
fscanf(f,"%d %d ",&a,&b);
add(a,b);
}
fclose(f);
}
int cupleaza(int a)
{
if(viz[a])
return 0;
viz[a] = true;
nod *q = A[a].cap;
while(q)
{
if(!dr[q->info])
{
viz[a] = true;
st[a] = q->info;
dr[q->info] = a;
return 1;
}
q = q->adr;
}
q = A[a].cap;
while(q)
{
if(cupleaza(dr[q->info]))
{
viz[a] = true;
st[a] = q->info;
dr[q->info] = a;
return 1;
}
q = q->adr;
}
return 0;
}
void cuplaj(void)
{
for(int i=1;i<=N;i++)
if(!st[i])
if(cupleaza(i))
++ nr;
else
{
memset(viz,false,sizeof(viz));
if(cupleaza(i))
++nr;
}
}
void afisare(void)
{
FILE *g = fopen("cuplaj.out","w");
fprintf(g,"%d\n",nr);
for(int i=1;i<=N;i++)
if(st[i])
fprintf(g,"%d %d\n",i,st[i]);
fclose(g);
}
int main()
{
citire();
cuplaj();
afisare();
return 0;
}