Pagini recente » Cod sursa (job #222307) | Cod sursa (job #1103564) | Cod sursa (job #151710) | Cod sursa (job #121188) | Cod sursa (job #1667556)
#include<stdio.h>
#include<algorithm>
#define MAXN 5005
FILE *f=fopen("sortare.in","r"), *g=fopen("sortare.out","w");
using namespace std;
struct Pivot{ int A, B, C; } P[MAXN];
int N, oldN, SOL[MAXN], poz[MAXN];
// poz = pozitiile ramase
void Citire(){
int i;
fscanf(f,"%d\n",&N);
oldN = N;
for(i=2;i<=N;i++)
fscanf(f,"%d %d %d\n",&P[i].A,&P[i].B,&P[i].C);
for(i=1;i<=N;i++)
poz[i] = i;
}
void Rezolvare(){
int vp[4], i, REZ = 0;
while( N >= 2 ){ REZ ++;
vp[1] = poz[ P[N].A ];
vp[2] = poz[ P[N].B ];
vp[3] = poz[ P[N].C ];
sort(vp+1,vp+4);
if( vp[1] == vp[2] || vp[2] == vp[3] )
SOL[ vp[2] ] = N;
else{
SOL[ vp[1] ] = N;
SOL[ vp[2] ] = N-1;
}
N = 0;
for(i=1;i<=oldN;i++)
if( SOL[i] == 0 )
poz[++N] = i;
}
if( N == 1 ){
REZ ++;
SOL[ poz[1] ] = N;
}
fprintf(g,"%d\n",REZ);
for(i=1;i<=oldN;i++)
fprintf(g,"%d ",SOL[i]);
}
int main(){
Citire();
Rezolvare();
return 0;
}