Pagini recente » Cod sursa (job #1536946) | Cod sursa (job #2912094) | Cod sursa (job #1737004) | Cod sursa (job #2191497) | Cod sursa (job #2336697)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5000;
int a[MAXN + 1], b[MAXN + 1], c[MAXN + 1];
int pos[MAXN + 1], sol[MAXN + 1], n;
void solve(int l, int r, int &ans) {
int len = r - l + 1;
if(len <= 0) {
return ;
}
ans++;
if(len == 1) {
return ;
}
int sz = 0;
for(int i = 1; i <= n; i++) {
if(sol[i] == 0) {
pos[++sz] = i;
}
}
int x = pos[a[len]], y = pos[b[len]], z = pos[c[len]];
sol[x] = len;
if(x == y || x == z) {
solve(l, r - 1, ans);
}
else {
if(x != y) {
sol[y] = len - 1;
}
else {
sol[z] = len - 1;
}
solve(l, r - 2, ans);
}
}
int main() {
ifstream cin("sortare.in");
ofstream cout("sortare.out");
int i;
ios::sync_with_stdio(false);
cin >> n;
for(i = 2; i <= n; i++) {
cin >> a[i] >> b[i] >> c[i];
if(b[i] == c[i]) {
swap(a[i], c[i]);
}
}
int ans = 0;
solve(1, n, ans);
cout << ans << "\n";
for(i = 1; i <= n; i++) {
if(sol[i] == 0) {
sol[i] = 1;
}
cout << sol[i] << " ";
}
cin.close();
cout.close();
return 0;
}