QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#282154#6421. Degree of Spanning TreejrjyyAC ✓208ms13600kbC++203.0kb2023-12-11 15:01:472023-12-11 15:01:47

Judging History

你现在查看的是最新测评结果

  • [2023-12-11 15:01:47]
  • 评测
  • 测评结果:AC
  • 用时:208ms
  • 内存:13600kb
  • [2023-12-11 15:01:47]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;

struct DSU {
    std::vector<int> fa, sz;
    DSU(int n = 0) {
        init(n);
    }
    void init(int n) {
        fa.resize(n);
        std::iota(fa.begin(), fa.end(), 0);
        sz.assign(n, 1);
    }
    int find(int x) {
        return x == fa[x] ? x : fa[x] = find(fa[x]);
    }
    bool same(int x, int y) {
        return find(x) == find(y);
    }
    bool merge(int x, int y) {
        x = find(x);
        y = find(y);
        if (x == y) {
            return false;
        }
        fa[y] = x;
        sz[x] += sz[y];
        return true;
    }
    int size(int x) {
        return sz[find(x)];
    }
};

void solve() {
    int n, m;
    std::cin >> n >> m;

    std::vector<std::pair<int, int>> edges;
    for (int i = 0; i < m; ++i) {
        int u, v;
        std::cin >> u >> v;
        --u, --v;
        edges.emplace_back(u, v);
    }

    DSU dsu(n);
    std::vector<int> deg(n);
    std::vector<std::vector<int>> adj(n);
    for (auto [u, v] : edges) {
        if (dsu.merge(u, v)) {
            deg[u] += 1;
            deg[v] += 1;
            adj[u].push_back(v);
            adj[v].push_back(u);
        }
    }

    int rt = std::max_element(deg.begin(), deg.end()) - deg.begin();
    std::vector<int> fa(n, -1);
    auto dfs = [&](auto self, int u) -> void {
        for (auto v : adj[u]) {
            if (v == fa[u]) {
                continue;
            }
            fa[v] = u;
            self(self, v);
        }
    };
    dfs(dfs, rt);

    std::vector<bool> del(n);
    std::vector<std::pair<int, int>> ans;
    del[rt] = true;
    if (deg[rt] > n / 2) {
        dsu.init(n);
        for (int u = 0; u < n; ++u) {
            if (u != rt && fa[u] != rt) {
                dsu.merge(fa[u], u);
            }
        }
        for (auto [u, v] : edges) {
            if (u != rt && v != rt && dsu.find(u) != dsu.find(v)) {
                int x = dsu.find(u);
                int y = dsu.find(v);
                if (deg[x] > deg[y]) {
                    std::swap(x, y);
                    std::swap(u, v);
                }
                dsu.merge(x, y);
                del[y] = true;
                ans.emplace_back(u, v);
                deg[rt] -= 1;
                deg[y] -= 1;
                deg[u] += 1;
                deg[v] += 1;
                if (deg[rt] <= n / 2) {
                    break;
                }
            }
        }
        if (*std::max_element(deg.begin(), deg.end()) > n / 2) {
            std::cout << "No\n";
            return;
        }
    }

    std::cout << "Yes\n";
    for (int u = 0; u < n; ++u) {
        if (!del[u]) {
            std::cout << fa[u] + 1 << " " << u + 1 << "\n";
        }
    }
    for (auto [u, v] : ans) {
        std::cout << u + 1 << " " << v + 1 << "\n";
    }
}

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3752kb

input:

2
6 9
1 2
1 3
1 4
2 3
2 4
3 4
4 5
4 6
4 6
3 4
1 3
2 3
3 3
1 2

output:

Yes
1 2
1 3
1 4
4 5
4 6
No

result:

ok 2 cases

Test #2:

score: 0
Accepted
time: 147ms
memory: 4640kb

input:

11140
10 15
9 6
5 7
6 5
2 3
7 5
7 5
3 10
9 7
5 5
9 1
7 5
2 8
7 5
4 3
6 2
9 19
3 7
3 9
2 8
2 8
3 6
5 1
1 8
8 9
8 3
4 8
5 5
3 1
4 3
1 3
8 6
1 3
7 4
4 3
8 8
12 20
10 2
5 5
2 4
3 3
3 3
5 11
9 2
5 5
7 12
11 3
3 3
3 5
5 3
3 1
4 6
7 11
6 8
4 5
6 12
6 5
8 18
4 2
4 3
2 4
2 4
4 3
4 8
2 2
6 7
2 4
6 2
1 4
8 7
4...

output:

Yes
9 1
2 3
3 4
6 5
2 6
5 7
2 8
6 9
3 10
Yes
8 1
8 2
9 3
8 4
1 5
3 6
3 7
8 9
Yes
3 1
11 3
2 4
4 5
4 6
11 7
6 8
2 9
2 10
5 11
7 12
Yes
4 1
4 2
4 3
7 5
2 6
6 7
4 8
Yes
5 1
9 2
2 3
3 4
5 6
5 7
7 8
5 9
Yes
6 1
2 3
6 4
2 5
2 6
1 7
10 8
1 9
2 10
Yes
7 1
6 2
1 3
5 4
7 5
7 6
Yes
6 2
12 3
1 4
4 5
1 6
8 7
2 8...

result:

ok 11140 cases

Test #3:

score: 0
Accepted
time: 208ms
memory: 13600kb

input:

5
100000 197799
37555 22723
91160 32701
6451 4416
43186 26432
9750 82955
28292 33907
91534 78442
17771 67061
40351 28116
21494 23114
34672 66640
72636 95093
13033 6538
53698 87837
79541 71230
53985 63500
84753 5378
67971 56748
90951 20169
4465 97293
18331 53564
41043 95738
48579 96439
90865 7526
391...

output:

Yes
1295 1
23589 2
44515 3
92524 4
57297 5
86612 6
98458 7
48558 8
79888 9
10575 10
4168 11
2855 12
73256 13
58500 14
66799 15
7422 16
95854 17
74022 18
62023 19
18071 20
14097 21
26485 22
28817 23
74947 24
68588 25
94611 26
15137 27
81313 28
70880 29
879 30
18240 31
71835 32
69791 33
72903 34
55996...

result:

ok 5 cases

Test #4:

score: 0
Accepted
time: 126ms
memory: 12368kb

input:

5
100000 100000
98195 31806
98195 70169
92153 98195
98195 46320
94369 56771
94369 49988
74295 98195
33796 98195
89903 94369
98195 1814
82388 98195
10189 94369
98195 6267
29845 98195
22425 94369
6241 98195
98195 33204
66516 98195
94369 71364
26277 94369
94369 94722
94369 25349
14629 98195
9329 98195
...

output:

Yes
98195 1
98195 2
98195 3
94369 4
94369 5
98195 6
94369 7
98195 8
94369 9
98195 10
98195 11
94369 12
98195 13
94369 14
94369 15
94369 16
98195 17
98195 18
98195 19
94369 20
94369 21
94369 22
94369 23
94369 24
94369 25
94369 26
94369 27
94369 28
98195 29
94369 30
94369 31
98195 32
98195 33
94369 34...

result:

ok 5 cases

Test #5:

score: 0
Accepted
time: 192ms
memory: 13068kb

input:

5
100000 149998
50735 5447
50735 24875
15119 49666
50735 30352
44756 49555
26546 32695
98445 50735
71657 50735
92212 50735
50735 19382
30935 50735
43688 46767
54630 54562
31371 50735
48877 50735
78593 76833
74317 37258
50735 48236
67116 50735
36579 50735
37536 44353
50735 46602
35088 29568
86657 507...

output:

Yes
50735 2
50735 3
50735 4
50200 5
22341 6
50735 7
2615 8
50735 10
50735 12
50735 14
50735 16
11154 17
99130 18
58578 19
6935 20
50735 21
52001 22
50735 23
50735 24
50735 26
25550 27
81821 28
31920 30
50735 31
50735 32
50735 33
50735 34
11030 35
50735 36
50735 37
59854 38
50735 39
50735 40
50735 41...

result:

ok 5 cases

Test #6:

score: 0
Accepted
time: 119ms
memory: 12400kb

input:

11102
14 14
9 10
10 14
9 11
10 2
9 14
9 5
10 13
9 8
4 9
3 10
10 1
12 10
10 6
9 7
6 6
3 2
3 5
2 6
1 6
3 4
3 6
5 5
3 2
2 1
4 5
2 5
5 3
8 8
5 6
4 6
8 6
8 4
6 1
8 3
2 8
7 8
12 12
8 12
12 2
4 12
9 12
12 3
1 12
1 8
6 8
11 8
7 8
8 10
12 5
15 15
9 15
6 15
13 8
15 3
8 11
15 12
8 2
15 4
8 10
15 8
15 14
8 4
7 ...

output:

Yes
10 1
10 2
10 3
9 4
9 5
10 6
9 7
9 8
9 11
10 12
10 13
10 14
14 9
Yes
6 1
3 2
3 4
3 5
2 6
Yes
2 1
2 3
5 4
3 5
Yes
6 1
8 2
8 3
6 4
6 5
8 7
6 8
Yes
12 1
12 2
12 3
12 4
12 5
8 6
8 7
12 9
8 10
8 11
1 8
Yes
15 1
8 2
15 3
15 4
8 5
15 6
8 7
15 9
8 10
8 11
15 12
8 13
15 14
4 8
Yes
9 1
3 2
9 4
9 5
3 6
3 7
...

result:

ok 11102 cases

Test #7:

score: 0
Accepted
time: 160ms
memory: 12504kb

input:

11102
14 19
9 3
3 6
8 3
2 14
7 3
11 3
13 9
3 14
3 5
2 3
7 4
1 10
13 3
4 3
3 1
3 10
12 8
11 6
3 12
11 15
9 11
10 7
1 2
9 6
11 2
11 10
8 11
11 5
3 8
11 4
11 3
11 7
1 11
5 4
6 11
5 6
1 2
4 3
3 5
1 3
5 4
3 2
12 16
8 11
12 10
12 3
5 7
12 5
1 12
9 4
12 2
6 12
12 8
10 1
12 11
7 12
12 9
3 2
4 12
6 7
3 1
6 3...

output:

Yes
3 1
14 2
7 4
3 5
3 7
3 8
3 9
1 10
3 11
8 12
9 13
3 14
11 6
Yes
2 1
11 2
8 3
11 5
9 6
10 7
11 8
11 9
11 10
5 4
Yes
3 1
1 2
3 5
5 4
Yes
12 3
9 4
12 5
12 6
5 7
12 8
12 9
12 10
8 11
10 1
3 2
Yes
3 2
3 4
3 5
4 6
5 1
Yes
5 2
4 3
1 4
1 5
1 6
Yes
2 1
6 2
6 3
6 4
7 5
6 7
9 8
6 9
4 11
3 10
Yes
5 1
5 2
5 3...

result:

ok 11102 cases

Test #8:

score: 0
Accepted
time: 150ms
memory: 3592kb

input:

100000
5 7
2 5
1 4
2 1
1 3
5 1
4 2
2 3
5 7
2 4
4 3
2 1
4 5
2 5
1 4
3 2
5 7
5 1
4 2
4 5
4 3
4 1
3 1
2 1
5 7
4 1
4 3
3 5
2 5
4 5
2 4
1 5
5 7
5 2
2 1
5 4
2 4
4 3
3 2
1 4
5 7
2 4
5 1
1 3
2 1
2 3
4 1
2 5
5 7
5 4
4 2
5 2
3 5
4 1
5 1
4 3
5 7
1 5
2 3
2 5
2 4
3 5
4 5
1 2
5 7
1 3
5 2
2 4
1 2
5 3
2 3
4 3
5 7
3...

output:

Yes
1 3
1 4
2 5
4 2
Yes
2 1
4 3
4 5
5 2
Yes
5 1
4 2
4 3
3 1
Yes
4 1
5 2
3 4
3 5
Yes
2 1
4 3
5 4
2 5
Yes
1 3
2 4
1 5
3 2
Yes
4 1
4 2
5 3
2 5
Yes
5 1
2 3
2 4
3 5
Yes
1 3
2 4
2 5
5 3
Yes
1 2
1 3
4 5
3 5
Yes
2 1
5 3
2 4
1 5
Yes
2 1
5 3
5 4
4 2
Yes
5 2
1 3
5 4
4 3
Yes
5 1
4 2
4 3
2 5
Yes
1 2
4 3
4 5
3 1
...

result:

ok 100000 cases

Test #9:

score: 0
Accepted
time: 61ms
memory: 3672kb

input:

1000
5 970
3 1
4 3
3 1
1 3
2 3
2 3
3 2
2 3
2 3
2 3
3 2
3 2
3 1
2 3
3 2
3 2
2 3
2 3
3 2
3 2
2 3
3 2
2 3
2 3
3 5
2 3
2 3
2 3
3 2
3 2
5 3
2 3
3 2
2 3
3 2
3 2
3 1
3 2
3 5
3 2
2 1
2 3
3 5
2 3
2 3
5 3
3 2
3 1
3 2
3 2
1 3
4 3
3 1
4 3
5 3
3 2
3 4
2 3
3 5
2 3
3 1
3 2
2 3
4 3
2 3
2 3
1 3
3 1
2 3
3 2
3 2
2 3
2...

output:

Yes
3 4
3 5
2 1
5 2
Yes
3 1
3 4
5 2
4 5
Yes
5 1
5 3
2 4
3 4
Yes
4 1
4 2
5 3
1 5
Yes
3 1
3 4
5 2
1 5
Yes
1 3
1 5
2 4
3 2
Yes
4 3
4 5
2 1
5 1
Yes
1 2
1 3
4 5
2 4
Yes
4 2
4 5
1 3
5 3
Yes
1 3
1 5
2 4
5 2
Yes
3 2
3 5
1 4
5 4
Yes
4 1
5 2
5 3
3 4
Yes
2 1
2 3
4 5
1 4
Yes
5 3
5 4
1 2
3 2
Yes
2 3
2 5
4 1
3 1
...

result:

ok 1000 cases

Test #10:

score: 0
Accepted
time: 122ms
memory: 3576kb

input:

100000
5 5
5 1
1 3
3 5
2 3
4 1
5 5
3 1
3 4
1 5
5 2
5 3
5 5
2 5
1 2
4 5
4 3
2 4
5 5
1 2
4 3
2 4
4 1
5 1
5 5
5 2
3 2
1 4
1 2
3 1
5 5
2 5
1 3
4 5
1 2
5 1
5 5
1 5
5 2
4 5
1 4
3 4
5 5
4 2
1 2
1 4
5 1
3 4
5 5
1 3
5 2
5 4
5 1
1 4
5 5
2 3
4 5
2 4
3 4
1 3
5 5
1 4
4 5
2 5
3 4
5 3
5 5
4 1
4 5
4 3
3 2
1 3
5 5
3...

output:

Yes
3 2
1 4
1 5
5 3
Yes
5 2
1 3
3 4
1 5
Yes
2 1
4 3
5 4
2 5
Yes
1 2
4 3
2 4
1 5
Yes
2 3
1 4
2 5
3 1
Yes
1 2
1 3
5 4
2 5
Yes
5 1
5 2
4 3
1 4
Yes
1 2
4 3
2 4
1 5
Yes
5 2
1 3
5 4
4 1
Yes
3 1
2 3
2 4
4 5
Yes
4 1
5 2
4 3
3 5
Yes
4 1
3 2
4 5
1 3
Yes
5 2
2 3
1 4
1 5
Yes
2 1
5 3
2 4
1 5
Yes
1 2
5 3
3 4
1 5
...

result:

ok 100000 cases