Pagini recente » Cod sursa (job #2745203) | Cod sursa (job #2116955) | Cod sursa (job #2650100) | Cod sursa (job #1192211) | Cod sursa (job #2342180)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
ifstream in("sortare.in");
ofstream out("sortare.out");
const int NMAX = 5002;
int pos[NMAX], mx;
int solve(int le, int ri, vector<vector<int>> &v, vector<int> &ans, int n) {
if(le == ri)
return 1;
if(le > ri)
return 0;
int len = ri - le + 1;
int sz = 0;
for(int i = 1; i <= n; i ++)
if(ans[i] == 0)
pos[++ sz] = i;
int a = pos[v[len][1]], b = pos[v[len][2]], c = pos[v[len][3]];
if(a == b || b == c || a == c) {
ans[b] = mx --;
return 1 + solve(le, ri - 1, v, ans, n);
} else {
ans[c] = mx --;
ans[b] = mx --;
return 1 + solve(le, ri - 2, v, ans, n);
}
}
int main() {
int n;
in >> n;
vector<vector<int>> v(n + 1, vector<int> (4, 0));
for(int i = 2; i <= n; i ++) {
in >> v[i][1] >> v[i][2] >> v[i][3];
sort(v[i].begin() + 1, v[i].end());
}
vector<int> ans(n + 1, 0);
mx = n;
out << solve(1, n, v, ans, n) << "\n";
for(int i = 1; i <= n; i ++) {
if(ans[i] == 0)
ans[i] = mx --;
out << ans[i] << " ";
}
return 0;
}