Cod sursa(job #521455)

Utilizator mvbinfoDragos Dinca mvbinfo Data 12 ianuarie 2011 16:16:05
Problema Cuplaj maxim in graf bipartit Scor 12
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#include<stdlib.h>
#define dim 10005
#define dim2 100005
using namespace std;

int *A[dim],*C[dim],n,m,i,x,y,viz[dim],j,N;
int l[dim2],c[dim2],NR;

void citire()
{
	FILE *f=fopen("cuplaj.in","r");
	
fscanf(f,"%d %d %d",&n,&N,&m);

for(i=0;i<=n;i++)
{
	A[i]=(int *) realloc (A[i] , sizeof(int));
	A[i][0]=0;
	
	C[i]=(int *) realloc (C[i] , sizeof(int));
	C[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));
	
	C[x][0]++;
	C[x]=(int *)realloc (C[x],(C[x][0]+1) * sizeof(int));
		
	A[x][A[x][0]]=y;
	C[x][C[x][0]]=1;	
}

fclose(f);
}

void dfs()
{
	
	for(i=1;i<=n;i++)
	{		
		x=i;
		for(j=1;j<=A[x][0];j++)
		{
		y=A[x][j];
			if(C[x][j] && !viz[y])
				{
					NR++;
					C[x][j]=0;
					 
					l[NR]=x;
					c[NR]=y;
					viz[y]=1;					
				}	
		}
	}	
}


int main()
{
	FILE *g=fopen("cuplaj.out","w");
	
	citire();

	dfs();

fprintf(g,"%d\n",NR);
for(i=1;i<=NR;i++)
	fprintf(g,"%d %d\n",l[i],c[i]);

fclose(g);
return 0;
}