Pagini recente » Cod sursa (job #450767) | Cod sursa (job #75251) | Cod sursa (job #2649973) | Cod sursa (job #938267) | Cod sursa (job #2644465)
#include <bits/stdc++.h>
#define DIMN 5010
using namespace std;
int rmax;
pair <int , int> val[DIMN];
int a[DIMN] , b[DIMN] , c[DIMN] , sol[DIMN];
int nr , v[DIMN];
void solve (int n){
int i;
rmax++;
if (!n)
return;
if (n == 1){ /// pui 1 pe pozitia curenta
sol[v[1]] = ++nr;
return;
}
if (a[n] == b[n] || b[n] == c[n]){ ///pivotii sunt 1 si n
if (a[n] == b[n])
sol[v[a[n]]] = ++nr;
else sol[v[c[n]]] = ++nr;
if (a[n] == b[n] && b[n] == c[n]){
for (i = 1 ; i <= n ; i++){
if (i > c[n])
v[i - 1] = v[i];
}
solve (n - 1);
}
else {
if (a[n] == b[n]){
for (i = 1 ; i <= n ; i++){
if (i > a[n])
v[i - 1] = v[i];
}
}
else {
for (i = 1 ; i <= n ; i++){
if (i > c[n])
v[i - 1] = v[i];
}
}
solve (n - 1);
}
}
else { /// un pivot e 1, un pivot e 2, un pivot e n
sol[v[a[n]]] = ++nr;
sol[v[b[n]]] = ++nr;
//aux = v[c[n]];
for (i = 1 ; i <= n ; i++){
if (i > b[n])
v[i - 2] = v[i];
else if (i > a[n] && i != b[n])
v[i - 1] = v[i];
}
solve (n - 2);
//sol[aux] = ++nr;
}
}
int main()
{
FILE *fin = fopen ("sortare.in","r");
FILE *fout = fopen ("sortare.out","w");
int n , i , x , y , z;
fscanf (fin,"%d",&n);
for (i = 2 ; i <= n ; i++){
fscanf (fin,"%d%d%d",&x,&y,&z);
a[i] = min(x , min(y , z));
c[i] = max(x , max(y , z));
b[i] = x + y + z - a[i] - c[i];
}
for (i = 1 ; i <= n ; i++)
v[i] = i;
solve (n);
fprintf (fout,"%d\n",rmax);
for (i = 1 ; i <= n ; i++)
fprintf (fout,"%d ",sol[i]);
return 0;
}