Pagini recente » Cod sursa (job #1935778) | Cod sursa (job #1415775) | Cod sursa (job #339449) | Cod sursa (job #1364528) | Cod sursa (job #1713124)
#include <cstdio>
#include <algorithm>
#include <vector>
#define MAXN 5000
#define pb(x) push_back(x)
int a[MAXN + 1], b[MAXN + 1], c[MAXN + 1];
int nr = 0;
std::vector<int> solve(int n){
nr++;
if(n < 3){
std::vector<int> r;
r.pb(1);
if(n == 2)
r.pb(2);
return r;
}
std::vector<int> r, rez;
int i, j;
if(a[n] == b[n] || a[n] == c[n] || b[n] == c[n]){
if(b[n] == c[n])
a[n] = b[n];
r = solve(n - 1);
rez.resize(n);
rez[a[n] - 1] = 1;
j = 0;
for(i = 0; i <= n; i++){
if(i != a[n] - 1){
rez[i] = r[j] + 1;
j++;
}
}
}
else{
r = solve(n - 2);
rez.resize(n);
rez[a[n] - 1] = 1;
if(b[n] != a[n])
rez[b[n] - 1] = 2;
else{
rez[c[n] - 1] = 2;
b[n] = c[n];
}
j = 0;
for(i = 0; i < n; i++){
if(i != a[n] - 1 && i != b[n] - 1){
rez[i] = r[j] + 2;
j++;
}
}
}
return rez;
}
int main(){
FILE *in = fopen("sortare.in", "r");
int n, i;
fscanf(in, "%d", &n);
for(i = 2; i <= n; i++)
fscanf(in, "%d%d%d", &a[i], &b[i], &c[i]);
fclose(in);
std::vector<int> rez = solve(n);
FILE *out = fopen("sortare.out", "w");
fprintf(out, "%d\n", nr);
for(i = 0; i < n; i++)
fprintf(out, "%d ", rez[i]);
fclose(out);
return 0;
}