Submission details
Task:Järjestys
Sender:jhuun
Submission time:2025-09-07 17:39:06 +0300
Language:C++ (C++20)
Status:READY
Result:70
Feedback
groupverdictscore
#1ACCEPTED10
#2ACCEPTED10
#3ACCEPTED10
#4ACCEPTED40
#50
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 4, 5details
#2ACCEPTED0.00 s1, 4, 5details
#3ACCEPTED0.00 s1, 4, 5details
#4ACCEPTED0.00 s1, 4, 5details
#5ACCEPTED0.00 s1, 4, 5details
#6ACCEPTED0.00 s1, 2, 4, 5details
#7ACCEPTED0.00 s1, 3, 4, 5details
#8ACCEPTED0.00 s1, 4, 5details
#9ACCEPTED0.03 s2, 4, 5details
#10ACCEPTED0.04 s3, 4, 5details
#11ACCEPTED0.03 s4, 5details
#12ACCEPTED0.03 s4, 5details
#13ACCEPTED0.03 s4, 5details
#14ACCEPTED0.04 s4, 5details
#15ACCEPTED0.30 s2, 5details
#16ACCEPTED0.55 s3, 5details
#17ACCEPTED0.46 s5details
#18ACCEPTED0.41 s5details
#19ACCEPTED0.40 s5details
#20ACCEPTED0.44 s5details
#210.52 s5details
#22ACCEPTED0.55 s5details

Code

#include <bits/stdc++.h>
 
struct Pair {
    int x;
    int y;
    int prev;
    int next;
    int root;
    std::vector<int> A;
    std::vector<int> B;
    bool operator<(const Pair& other) { return x < other.x; }
};
 
int get_root(const std::vector<Pair>& pairs, int x) {
    const auto& p = pairs[x];
    return p.root == -1 ? x : get_root(pairs, p.root);
}
 
bool same_path(const std::vector<Pair>& pairs, int a, int b) {
    return get_root(pairs, a) == get_root(pairs, b);
}
 
void set_roots(std::vector<Pair>& pairs, int a, int b) {
    const auto ra = get_root(pairs, a);
    const auto rb = get_root(pairs, b);
    pairs[rb].root = ra;
}
 
bool connect(std::vector<Pair>& pairs, int s, int e) {
    auto x = pairs[s].x;
    for (; s < e; ++s) {
        auto c = -1;
        auto val = std::numeric_limits<int>::max();
        for (auto i = 0; i < static_cast<int>(pairs.size()); ++i) {
            if (i == s) continue;
            auto& p = pairs[i];
            if (p.next >= 0) continue;
            if (same_path(pairs, s, i)) continue;
            if (p.y > x) continue;
            if (p.x < val) {
                c = i;
                val = p.x;
            }
        }
        if (c == -1) continue;
        pairs[s].prev = c;
        pairs[c].next = s;
        set_roots(pairs, s, c);
    }
    return true;
}
 
void dfs(std::vector<Pair>& pairs, std::vector<bool>& visited, int i, int& k) {
    for (const auto& x : pairs[i].A) {
        if (visited[x]) continue;
        visited[x] = true;
        ++k;
        dfs(pairs, visited, x, k);
    }
    for (const auto& x : pairs[i].B) {
        if (visited[x]) continue;
        visited[x] = true;
        ++k;
        dfs(pairs, visited, x, k);
    }
}
 
bool check(std::vector<Pair>& pairs) {
    for (auto i = 0; i < static_cast<int>(pairs.size()); ) {
        auto si = i;
        auto x = pairs[i].x;
        while (i < static_cast<int>(pairs.size()) && pairs[i].x == x) {
            ++i;
        }
        auto c = 0;
        for (auto j = 0; j < static_cast<int>(pairs.size()); ++j) {
            c += pairs[j].y <= x;
        }
        if (i > c + 1) {
            return false;
        }
        connect(pairs, si, i);
    }
    return true;
}
 
void solve(const std::vector<Pair>& pairs,
           std::vector<bool>& visited,
           std::vector<std::size_t>& path,
           std::size_t idx,
           std::size_t n,
           bool &ok)
{
    if (ok) return;
    if (n == pairs.size()) {
        std::cout << "YES\n";
        for (const auto i : path) {
            std::cout << pairs[i].x << ' ' << pairs[i].y << '\n';
        }
        ok = true;
        return;
    }
    for (const auto ni : pairs[idx].A) {
        if (visited[ni]) continue;
        visited[ni] = true;
        path[n] = ni;
        solve(pairs, visited, path, ni, n + 1, ok);
        visited[ni] = false;
    }
}
 
int main() {
    int t, n, x, y;
    std::cin >> t;
    for (auto i = 0; i < t; ++i) {
        std::cin >> n;
        std::vector<Pair> pairs;
        for (auto j = 0; j < n; ++j) {
            std::cin >> x >> y;
            pairs.emplace_back(x, y, -1, -1, -1);
        }
        std::sort(pairs.begin(), pairs.end());
        for (auto j = 0; j < n; ++j) {
            for (auto k = 0; k < n; ++k) {
                if (j == k) continue;
                if (pairs[j].y <= pairs[k].x) {
                    pairs[j].A.push_back(k);
                    pairs[k].B.push_back(j);
                }
            }
        }
        if (n <= 8) {
            std::vector<bool> visited(n);
            std::vector<std::size_t> path(n);
            bool ok = false;
            for (std::size_t idx = 0; idx < pairs.size(); ++idx) {
                visited[idx] = true;
                path[0] = idx;
                solve(pairs, visited, path, idx, 1, ok);
                visited[idx] = false;
                if (ok) break;
            }
            if (!ok) std::cout << "NO\n";
        } else {
            std::vector<bool> visited(n);
            int dfs_ok = 1;
            visited[0] = true;
            dfs(pairs, visited, 0, dfs_ok);
            const auto ok = dfs_ok == n && check(pairs);
            if (ok) {
                std::cout << "YES\n";
                auto k = -1;
                for (auto j = 0; j < static_cast<int>(pairs.size()); ++j) {
                    if (pairs[j].prev < 0) {
                        k = j;
                        break;
                    }
                }
                k = std::max(k, 0);
                std::cout << pairs[k].x << ' ' << pairs[k].y << '\n';
                for (k = pairs[k].next; k != -1; k = pairs[k].next) {
                    std::cout << pairs[k].x << ' ' << pairs[k].y << '\n';
                }
            } else {
                std::cout << "NO\n";
            }
        }
    }
}

Test details

Test 1

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
1
74 75
1
100 43
...

correct output
YES
74 75
YES
100 43
YES
...

user output
YES
74 75
YES
100 43
YES
...
Truncated

Test 2

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
2
80 54
51 61
2
...

correct output
YES
51 61
80 54
YES
2 64
...

user output
YES
51 61
80 54
YES
2 64
...
Truncated

Test 3

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
3
3 74
91 45
100 24
...

correct output
YES
3 74
100 24
91 45
YES
...

user output
YES
3 74
91 45
100 24
YES
...
Truncated

Test 4

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
4
88 50
62 41
12 86
...

correct output
YES
12 86
88 50
62 41
66 93
...

user output
YES
12 86
88 50
62 41
66 93
...
Truncated

Test 5

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
5
82 80
80 92
5 22
...

correct output
YES
5 22
94 13
82 80
80 92
...

user output
YES
5 22
80 92
93 91
94 13
...
Truncated

Test 6

Group: 1, 2, 4, 5

Verdict: ACCEPTED

input
100
5
34 38
26 30
1 6
...

correct output
YES
1 6
12 22
26 30
34 38
...

user output
YES
1 6
12 22
26 30
34 38
...
Truncated

Test 7

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
100
5
50 40
28 25
51 7
...

correct output
YES
51 7
50 40
47 1
17 11
...

user output
YES
17 11
28 25
47 1
50 40
...
Truncated

Test 8

Group: 1, 4, 5

Verdict: ACCEPTED

input
100
5
2 2
2 1
1 1
...

correct output
YES
1 2
2 1
2 1
1 1
...

user output
YES
1 1
1 2
2 2
2 1
...
Truncated

Test 9

Group: 2, 4, 5

Verdict: ACCEPTED

input
100
100
175870020 296379324
248160539 883842002
21934885 781732852
...

correct output
NO
YES
4976156 6890135
10553287 11923223
14617057 17728163
...

user output
NO
YES
4976156 6890135
10553287 11923223
14617057 17728163
...
Truncated

Test 10

Group: 3, 4, 5

Verdict: ACCEPTED

input
100
100
447597377 314433951
700232436 691277009
937268439 708165426
...

correct output
YES
998963839 391778929
995772196 257222033
995754704 553123757
994629465 247775824
...

user output
YES
998963839 391778929
995772196 257222033
995754704 553123757
994629465 247775824
...
Truncated

Test 11

Group: 4, 5

Verdict: ACCEPTED

input
100
100
1 1
1 2
2 1
...

correct output
YES
1 2
2 1
1 2
2 2
...

user output
YES
2 2
2 1
2 1
2 2
...
Truncated

Test 12

Group: 4, 5

Verdict: ACCEPTED

input
100
100
7 1
6 3
10 9
...

correct output
YES
6 7
7 8
9 10
10 10
...

user output
YES
10 3
10 4
10 9
10 5
...
Truncated

Test 13

Group: 4, 5

Verdict: ACCEPTED

input
100
100
51 5
85 77
91 84
...

correct output
YES
100 24
100 25
100 3
100 6
...

user output
YES
100 6
100 3
100 24
100 25
...
Truncated

Test 14

Group: 4, 5

Verdict: ACCEPTED

input
100
100
823828194 863717310
593641073 340054211
420481158 965069109
...

correct output
YES
999289319 634855378
996775156 433726648
983657502 55234695
981890636 112877413
...

user output
YES
999289319 634855378
996775156 433726648
983657502 55234695
981677275 583080648
...
Truncated

Test 15

Group: 2, 5

Verdict: ACCEPTED

input
100
500
88724450 89315226
266915464 267648621
189301651 189661541
...

correct output
YES
764920 1459946
1936195 2832987
3691481 4085931
4991808 5840928
...

user output
YES
764920 1459946
1936195 2832987
3691481 4085931
4991808 5840928
...
Truncated

Test 16

Group: 3, 5

Verdict: ACCEPTED

input
100
500
763682761 317584504
756010800 260162861
435911339 78070399
...

correct output
YES
998768285 3307355
998714926 628486754
997115613 820932481
993320616 554600893
...

user output
YES
998768285 3307355
998714926 628486754
997115613 820932481
993320616 554600893
...
Truncated

Test 17

Group: 5

Verdict: ACCEPTED

input
100
500
2 2
2 1
1 2
...

correct output
YES
1 2
2 2
2 1
1 2
...

user output
YES
2 2
2 1
2 2
2 2
...
Truncated

Test 18

Group: 5

Verdict: ACCEPTED

input
100
500
10 6
10 10
9 10
...

correct output
YES
2 3
3 4
4 5
5 6
...

user output
YES
10 3
10 4
10 4
10 2
...
Truncated

Test 19

Group: 5

Verdict: ACCEPTED

input
100
500
85 87
89 70
70 92
...

correct output
YES
96 97
100 67
100 10
100 97
...

user output
YES
100 23
100 77
100 70
100 67
...
Truncated

Test 20

Group: 5

Verdict: ACCEPTED

input
100
500
861154169 119512584
569086662 606567153
288230434 322196278
...

correct output
YES
999945324 969534372
999738857 240617694
999244114 722161553
999207839 557351400
...

user output
YES
999945324 969534372
999738857 240617694
999244114 722161553
999207839 557351400
...
Truncated

Test 21

Group: 5

Verdict:

input
100
500
116439250 401518028
280329609 193466222
674040956 209050570
...

correct output
NO
YES
773701149 773852119
987509190 315670966
977413249 510418200
...

user output
NO
YES
987509190 315670966
974446468 70745580
971205542 864479750
...
Truncated

Test 22

Group: 5

Verdict: ACCEPTED

input
100
500
934181189 942499518
684836806 395802802
957884803 570946201
...

correct output
YES
999772640 505132174
999111650 140844643
999028633 888134186
999020109 291046771
...

user output
YES
999772640 505132174
999111650 140844643
999028633 888134186
999020109 291046771
...
Truncated