Cod sursa(job #496353)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 28 octombrie 2010 17:35:53
Problema Sortare Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#define nmax 5010

int a[nmax], b[nmax], c[nmax], p[nmax], d[nmax], sol[nmax], n, r, k;

int main()
{
	freopen("sortare.in","r",stdin);
	freopen("sortare.out","w",stdout);
	scanf("%d",&n);
	int i, x, cn=n;
	for (i=2; i<=n; i++) scanf("%d %d %d",&a[i],&b[i],&c[i]);
	for (i=1; i<=n; i++) p[i]=i;
	k=0;
	while (n>0)
	{
		r++;
		x=0;
		if (a[n]!=b[n] && a[n]!=c[n] && b[n]!=c[n])
		{
			sol[p[a[n]]]=++k;
			sol[p[b[n]]]=++k;
			if (a[n]<b[n])
			{
				d[a[n]]=1;
				d[b[n]-1]=2;
			} else
			{
				d[a[n]-1]=2;
				d[b[n]]=1;
			}
		} else
		{
			if (a[n]!=b[n]) x=c[n]; else x=a[n];
			sol[p[x]]=++k;
			d[x]=1;
		}
		for (i=1; i<=n; i++)
			if (!d[i]) d[i]=d[i-1];
		for (i=1; i<=n; i++) p[i]=p[i+d[i]];
		if (x) n--; else n-=2;
		for (i=1; i<=n; i++) d[i]=0;
	}
	printf("%d\n",r);
	for (i=1; i<=cn; i++) 
	{
		if (!sol[i]) sol[i]=cn;
		printf("%d ",sol[i]);
	}
	printf("\n");
}