Cod sursa(job #465899)

Utilizator SmarandaMaria Pandele Smaranda Data 25 iunie 2010 13:54:37
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.38 kb
#include<stdio.h>
#include<string.h>
long a[1001][1001];
long b[1001][1001];
long k[1001];
long k2[1001];
struct MESAJ
{
	long v,w;
};
MESAJ h[1001];
int main()
{
	long n,m,i,j,x,y,u=0,ok=1,max,num=0,nu=0;
	
	freopen("mesaj4.in","r",stdin);
	freopen("mesaj4.out","w",stdout);
	
	scanf("%ld%ld",&n,&m);
	for (i=1;i<=m;i++)
	{
		scanf("%ld%ld",&x,&y);
		a[x][y]=1;
		a[y][x]=1;
	}
	for (i=1;i<=n;i++)
		b[i][i]=1;
	do
	{
		ok=1;
		max=1000000000;
		for (i=1;i<=n;i++)
			{
				num=0;
				for (j=1;j<=n;j++)
				{
					if (b[i][j])
						num++;
				}
				if (num<max)
				{
					max=num;
					x=i;
				}
			}
		num=max;
		max=-1;
		//memcpy(k,b[x],sizeof(k));
		for (j=1;j<=n;j++)
		{
			if (a[x][j]==1)
			{
				memcpy(k,b[x],sizeof(k));
				for (i=1;i<=n;i++)
				{
					k[i]=k[i]+b[j][i];
				}
				nu=0;
				for (i=1;i<=n;i++)
				{
					if (k[i])
						nu++;
				}
				if (nu>num)
				{
					if (nu>max)
						{
							max=nu;
							ok=0;
							y=j;
							memcpy(k2,k,sizeof(k2));
						}
				}
			}
		}
		if (ok==0)
		{
			memcpy(b[x],k2,sizeof(b[x]));
			h[++u].v=x;
			h[u].w=y;
		}
	}while (ok==0);
	ok=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=n;j++)
			if (b[i][j])
				ok++;
	if (ok==n*n)
	{
		printf("%ld\n",u);
		for (i=1;i<=u;i++)
			printf("%ld %ld\n",h[i].v,h[i].w);
	}
	else
		printf("-1\n");
	return 0;
}