hiho week 154 register

Ended

Participants:224

Verdict:Accepted
Score:100 / 100
Submitted:2017-06-13 19:44:40

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
const int MAXN = 1005;
int W, H, N, father[MAXN], x[MAXN], y[MAXN], r[MAXN];
int findFather(int x) {
    return father[x] == x ? x : father[x] = findFather(father[x]);
}
void Union(int x, int y) {
    father[findFather(x)] = findFather(y);
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d%d", &W, &H, &N);
        for (int i = 0; i < N; ++i)
            scanf("%d%d%d", x + i, y + i, r + i);
        for (int i = 0; i <= N + 1; ++i) father[i] = i;
        for (int i = 0; i < N; ++i)
            for (int j = i + 1; j < N; ++j)
                if ((long long)(r[i] + r[j]) * (r[i] + r[j]) >= (long long)(x[i] - x[j]) * (x[i] - x[j]) + (long long)(y[i] - y[j]) * (y[i] - y[j]))
                    Union(i, j);
        for (int i = 0; i < N; ++i) {
            if (y[i] <= r[i])
                Union(i, N);
            if (H - y[i] <= r[i])
                Union(i, N + 1);
        }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX