5402 2023. 05. 12 15:58:58 szil Széfnyitás cpp14 Accepted 100/100 8ms 6420 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;
const ll INF = 1e18;

const int MAXN = 151;

int s[MAXN][2], s2[50001][2], a[MAXN], b[50001];
bool bits[MAXN];

int timer;
struct Node {
    Node *p[2] = {nullptr, nullptr};
    int u = -1, t;
};

Node *root;

void add(vector<int> &v, int u) {
    Node *ptr = root;
    for (int i : v) {
        if (ptr->p[i] == nullptr) {
            ptr->p[i] = new Node();
            ptr->p[i]->t = timer++;
        }
        ptr = ptr->p[i];
    }
    ptr->u = u;
}

void upd(Node *v, int d = 0) {
    b[v->t] = bits[d];
    if (v->u != -1) {
        s2[v->t][0] = s2[v->t][1] = v->u;
        return;
    }
    if (v->p[0] != nullptr) {
        s2[v->t][0] = v->p[0]->t;
        upd(v->p[0], d + 1);
    }
    if (v->p[1] != nullptr) {
        s2[v->t][1] = v->p[1]->t;
        upd(v->p[1], d + 1);
    }
}

int main()
{
    srand(time(0));
    ios::sync_with_stdio(0); cin.tie(0);
    int n, k; cin >> n;
    timer = n + 1;
    root = new Node();
    root->t = timer++;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> a[i] >> s[i][0] >> s[i][1];
    }
    cin >> k;
    for (int i = 0; i < n; i++) {
        bits[i] = rand() % 2;
    }

    if (n <= 2) {
        b[1] = 0;
        b[2] = 1;

        for (int i = 1; i <= 2; i++) {
            for (int j = 1; j <= 2; j++) {
                for (int c = 1; c <= 2; c++) {
                    for (int d = 1; d <= 2; d++) {
                        s2[1][0] = i;
                        s2[1][1] = j;
                        s2[2][0] = c;
                        s2[2][1] = d;
                        bool g = true;
                        for (int start = 1; start <= n && g; start++) {
                            int left = k;
                            int stB = 1;
                            int st = start;
                            for (int it = 0; it <= 10; it++) {
                                int o1 = a[st];
                                int o2 = b[stB];
                                if (o1 != o2) {
                                    if (left == 0) {
                                        g = false;
                                        break;
                                    }
                                    left--;
                                }
                                st = s[st][o2];
                                stB = s2[stB][o1];
                            }
                        }

                        if (g) {
                            cout << "2 1\n";
                            cout << b[1] << " " << s2[1][0] << " " << s2[1][1] << "\n" << b[2] << " " << s2[2][0] << " " << s2[2][1] << "\n";
                            exit(0);
                        }
                    }
                }
            }
        }
        exit(1);
    }

    for (int i = 1; i <= n; i++) {
        vector<int> v;
        int u = i;
        for (int it = 0; it < n-1; it++) {
            v.push_back(a[u]);
            u = s[u][bits[it]];
        }
        add(v, s[u][bits[n-1]]);
    }
    upd(root);
    cout << timer-1 << " " << n+1 << "\n";
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " " << s[i][0] << " " << s[i][1] << "\n";
    }
    for (int i = n+1; i < timer; i++) {
        if (s2[i][0] == 0) s2[i][0] = s2[i][1];
        if (s2[i][1] == 0) s2[i][1] = s2[i][0];
        if (s2[i][0] == 0) {
            s2[i][0] = s2[i][1] = 1;
        }
        cout << b[i] << " " << s2[i][0] << " " << s2[i][1] << "\n";
    }
    return 0;
}
Subtask Sum Test Verdict Time Memory
subtask1 0/0
1 Accepted 3ms 1836 KiB
2 Accepted 3ms 2028 KiB
subtask2 16/16
3 Accepted 3ms 2028 KiB
4 Accepted 3ms 2240 KiB
5 Accepted 3ms 2448 KiB
6 Accepted 3ms 2664 KiB
7 Accepted 3ms 2880 KiB
8 Accepted 3ms 3092 KiB
9 Accepted 2ms 3172 KiB
10 Accepted 2ms 3172 KiB
11 Accepted 3ms 3384 KiB
12 Accepted 2ms 3384 KiB
13 Accepted 3ms 3516 KiB
14 Accepted 3ms 3596 KiB
subtask3 24/24
15 Accepted 3ms 3596 KiB
16 Accepted 3ms 3608 KiB
17 Accepted 3ms 3884 KiB
18 Accepted 3ms 4188 KiB
19 Accepted 3ms 4308 KiB
20 Accepted 3ms 4392 KiB
21 Accepted 3ms 4476 KiB
22 Accepted 3ms 4420 KiB
23 Accepted 3ms 4412 KiB
subtask4 23/23
24 Accepted 3ms 4412 KiB
25 Accepted 3ms 4516 KiB
26 Accepted 3ms 4600 KiB
27 Accepted 3ms 4616 KiB
28 Accepted 3ms 4776 KiB
29 Accepted 3ms 5056 KiB
30 Accepted 3ms 5016 KiB
31 Accepted 3ms 5024 KiB
32 Accepted 3ms 5020 KiB
subtask5 37/37
33 Accepted 3ms 5020 KiB
34 Accepted 3ms 2240 KiB
35 Accepted 3ms 2448 KiB
36 Accepted 3ms 2664 KiB
37 Accepted 3ms 2880 KiB
38 Accepted 3ms 3092 KiB
39 Accepted 2ms 3172 KiB
40 Accepted 2ms 3172 KiB
41 Accepted 3ms 3384 KiB
42 Accepted 2ms 3384 KiB
43 Accepted 3ms 3516 KiB
44 Accepted 3ms 3596 KiB
45 Accepted 3ms 3608 KiB
46 Accepted 3ms 3884 KiB
47 Accepted 3ms 4188 KiB
48 Accepted 3ms 4308 KiB
49 Accepted 3ms 4392 KiB
50 Accepted 3ms 4476 KiB
51 Accepted 3ms 4420 KiB
52 Accepted 3ms 4412 KiB
53 Accepted 3ms 4516 KiB
54 Accepted 3ms 4600 KiB
55 Accepted 3ms 4616 KiB
56 Accepted 3ms 4776 KiB
57 Accepted 3ms 5056 KiB
58 Accepted 3ms 5016 KiB
59 Accepted 3ms 5024 KiB
60 Accepted 3ms 5020 KiB
61 Accepted 4ms 5200 KiB
62 Accepted 6ms 5932 KiB
63 Accepted 6ms 5808 KiB
64 Accepted 7ms 6048 KiB
65 Accepted 7ms 6232 KiB
66 Accepted 8ms 6420 KiB
67 Accepted 7ms 6188 KiB
68 Accepted 7ms 6244 KiB
69 Accepted 7ms 6260 KiB
70 Accepted 7ms 6276 KiB
71 Accepted 7ms 6268 KiB
72 Accepted 7ms 6292 KiB