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>
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#18103 | #1008. H. 开疆辟土,公司成立 | Time Limit Exceeded | 0 | 4106 ms | 98976 K | C++ 11 / 1.2 K | Diorvh | 2019-07-15 3:08:48 |
#include <bits/stdc++.h>
using namespace std;
#define MAX 400000
#define ll long long
struct E {
ll u, v, value;
E(ll a = 0, ll b = 0, ll c = 0) : u(a), v(b), value(c) {}
bool operator<(E x) { return (value > x.value); }
};
ll road[MAX];
ll fnd(ll x) { return (x == road[x]) ? x : road[x] = fnd(road[x]); }
void merge(ll u, ll v) { road[fnd(u)] = fnd(v); }
int main() {
ll T, n, m, c1, c2;
scanf("%d", &T);
for (ll z = 1; z <= T; ++z) {
vector<E> q;
scanf("%d%d", &n, &m);
ll total = 0, ans = 0;
for (ll i = 1; i <= n; ++i)
for (ll j = 1; j <= m; ++j) {
scanf("%d%d", &c1, &c2);
total += c1 + c2;
ll b = (i - 1) * m + j;
if (b <= (n - 1) * m)
q.push_back(E(b, b + m, c1));
if (b % m)
q.push_back(E(b, b + 1, c2));
}
sort(q.begin(), q.end());
for (ll i = 1; i <= n * m; ++i) road[i] = i;
for (ll i = 0; i <= n * m - 1; ++i)
if (fnd(q[i].u) != fnd(q[i].v)) {
merge(q[i].u, q[i].v);
ans += q[i].value;
}
printf("%d\n", total - ans);
}
return 0;
}
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
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>
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>