Cod sursa(job #961369)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 11 iunie 2013 22:33:48
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#include<algorithm>

#define maxn 5005

using namespace std;

FILE*f=fopen("sortare.in","r");
FILE*g=fopen("sortare.out","w");

int n;
int A[maxn],B[maxn],C[maxn],sol[maxn],v[2][maxn],x[5];

int main () {
	
	fscanf(f,"%d",&n);
	A[1] = B[1] = C[1] = 1;
	for ( int i = 2 ; i <= n ; ++i ){
		fscanf(f,"%d %d %d",&A[i],&B[i],&C[i]);
	}
	
	int p = 0;
	for ( int i = 1 ; i <= n ; ++i ){
		v[p][++v[p][0]] = i;
	}
	
	int depth = 0;
	while ( v[p][0] ){
		int r = v[p][0];
		
		if ( A[r] == B[r] || B[r] == C[r] || C[r] == A[r] ){
			int poz = 0;
			if ( A[r] == B[r] )	poz = A[r];
			if ( B[r] == C[r] )	poz = B[r];
			if ( C[r] == A[r] )	poz = C[r];
			
			sol[v[p][poz]] = r;
		}
		else{
			x[1] = A[r],x[2] = B[r],x[3] = C[r];
			sort(x+1,x+4);
			sol[v[p][x[2]]] = r-1,sol[v[p][x[3]]] = r;
		}
		
		v[1-p][0] = 0;
		for ( int i = 1 ; i <= r ; ++i ){
			if ( !sol[v[p][i]] ){
				v[1-p][++v[1-p][0]] = v[p][i];
			}
		}
		p = 1-p; ++depth;
	}
	
	fprintf(g,"%d\n",depth);
	for ( int i = 1 ; i <= n ; ++i ){
		fprintf(g,"%d ",sol[i]);
	}
	fprintf(g,"\n");
	
	fclose(f);
	fclose(g);
	
	return 0;
}