编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#46898 #1008. H. 开疆辟土,公司成立 Accepted 100 426 ms 13940 K C++ 17 / 1.7 K 20183400682 2020-12-17 21:52:04
显示原始代码
#ifdef D
#include "hpp.hpp"
#else
#include <bits/stdc++.h>
#endif

using namespace std;

using I = long long;

class Main {
    struct C {
        I c;
        I x;
        I y;

        bool operator<(C const &t) const { return c < t.c; }
    };

    vector<C> cs;
    vector<I> ds;
    I const M, M1, N, N1;

    I find(I i) { return i == ds[i] ? i : ds[i] = find(ds[i]); }
    inline bool merge(I i, I j) {
        I const fi = find(i), fj = find(j);
        if (fi == fj) {
            return false;
        }
        ds[fj] = fi;
        return true;
    }

public:
    Main(I m, I n) : M(m), M1(m + 1), N(n), N1(n + 1) {
        cs.resize(M * N << 1);
        ds.resize(M1 * N1, 0);
        I i, j, t = 0, u, v, w = M1;
        for (i = 1; i <= N; ++i) {
            ++w;
            for (j = 1; j <= M; ++j, ++w) {
                scanf("%lld%lld", &u, &v);
                cs[t++] = { u, w - 1, w };
                cs[t++] = { v, w - M1, w };
                ds[w] = w;
            }
        }
        for (i = 1; i <= N; ++i) {
            ds[i * M1 + M] = 0;
        }
        for (j = 1; j <= M; ++j) {
            ds[N * M1 + j] = 0;
        }
    }

    void main() {
        I s = 0, z = (M - 1) * (N - 1);
        sort(cs.begin(), cs.end());
        for (C const &c : cs) {
            if (!z) {
                printf("%lld\n", s);
                return;
            }
            if (merge(c.x, c.y)) {
                s += c.c;
                --z;
            }
        }
    }
};

int main() {
    I m, n, t;
    for (scanf("%lld", &t); t; --t) {
        scanf("%lld%lld", &n, &m);
        Main main(m, n);
        main.main();
    }
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:117 ms
内存:13292 KiB

输入文件(1.in

17
3 3
1 9
7 8
4 0
2 6
12 5
3 0
0 10
0 11
0 0
5 3
10 10
6 5
8 0
9 2
8 1
5 0
5 1
7 
<2829398 bytes omitted>

答案文件(1.ans

10
20
0
7
0
123
163
244
999
1671
100930
181216
80898
1402126
60776271
1014605
19212781

用户输出

10
20
0
7
0
123
163
244
999
1671
100930
181216
80898
1402126
60776271
1014605
19212781

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:88 ms
内存:12836 KiB

输入文件(2.in

1
464 491
795 867
164 87
803 106
734 583
278 855
600 628
824 780
992 364
778 598
747 423

<1999727 bytes omitted>

答案文件(2.ans

60198435

用户输出

60198435

系统信息

Exited with return code 0
测试点 #3
Accepted
得分:100
用时:85 ms
内存:12788 KiB

输入文件(3.in

1
491 462
33 971
433 904
185 869
103 87
507 127
238 315
994 56
215 73
771 129
430 505
281
<1990927 bytes omitted>

答案文件(3.ans

59997625

用户输出

59997625

系统信息

Exited with return code 0
测试点 #4
Accepted
得分:100
用时:136 ms
内存:13940 KiB

输入文件(4.in

1
500 500
613 369
811 452
954 965
32 666
60 515
235 679
26 708
45 831
470 788
371 261
101
<2193863 bytes omitted>

答案文件(4.ans

66160818

用户输出

66160818

系统信息

Exited with return code 0