Pagini recente » Cod sursa (job #2009877) | Cod sursa (job #767643) | Cod sursa (job #91045) | Cod sursa (job #1259813) | Cod sursa (job #2011816)
#include<cstdio>
#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;
}