Cod sursa(job #2342180)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 12 februarie 2019 17:29:07
Problema Sortare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#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;
}