Pagini recente » Cod sursa (job #3238726) | Cod sursa (job #2937326) | Cod sursa (job #505494) | Cod sursa (job #310452) | Cod sursa (job #584452)
Cod sursa(job #584452)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define dim 10005
using namespace std;
int *A[dim],n,m,i,x,y,j,L[dim],R[dim],NR,gasit,ok,l1,r1;
short int viz[dim];
void citire()
{
FILE *f=fopen("cuplaj.in","r");
fscanf(f,"%d %d %d",&n,&m,&m);
for(i=0;i<=n;i++)
{
A[i]=(int *) realloc (A[i] , sizeof(int));
A[i][0]=0;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&x,&y);
A[x][0]++;
A[x]=(int *)realloc (A[x],(A[x][0]+1) * sizeof(int));
A[x][A[x][0]]=y;
}
fclose(f);
}
void afisare()
{
FILE *g=fopen("cuplaj.out","w");
fprintf(g,"%d\n",NR);
for(i=1;i<=n;i++)
if(L[i] && R[L[i]]==i)
fprintf(g,"%d %d\n",i,L[i]);
fclose(g);
}
int solve(int x)
{
int i; // l r
if(viz[x]==1) return 0;
viz[x]=1;
for(i=1;i<=A[x][0];i++)
if(! R[ A[x][i] ])
{
L[x]=A[x][i];
R[A[x][i]]=x;
return 1;
}
for(i=1;i<=A[x][0];i++)
if(solve( R[ A[ x ][ i ] ] ))
{
L[x]=A[x][i];
R[A[x][i]]=x;
return 1;
}
return 0;
}
void cuplaj()
{
int i,ok=0;
while(!ok)
{
ok=1;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++)
if(!L[i])
if( solve( i ) )
ok=0;
}
for(i=1;i<=n;i++)
if(L[i])
NR++;
}
int main()
{
citire();
cuplaj();
afisare();
return 0;
}