답안 #1021416

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1021416 2024-07-12T17:47:16 Z Wael 분수 공원 (IOI21_parks) C++17
5 / 100
262 ms 56232 KB
#include "parks.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;

struct DSU {
    int n, cnt;
    vector<int> f, sz;
    DSU(int n) : n(n), cnt(n) {
        f.resize(n);
        iota(f.begin(), f.end(), 0);
        sz.resize(n, 1);
    }

    int find(int u) {
        if (f[u] == u) return u;
        return f[u] = find(f[u]);
    }

    void merge(int u, int v) {
        u = find(u);
        v = find(v);
        if (u == v) return;
        --cnt;
        if (sz[v] > sz[u]) {
            swap(u, v);
        }
        f[v] = u;
        sz[u] += sz[v];
    }

    bool same(int u, int v) {
        return find(u) == find(v);
    }
};

int construct_roads(vector<int> x, vector<int> y) {
    int n = x.size();

    int N = 2e5;
    vector<map<int, int>> id(N + 1);

    for (int i = 0; i < n; ++i) {
        id[x[i]][y[i]] = i;
    }

    vector<map<int, int>> vis(N + 10);
    DSU dsu(n);
    vector<int> u, v, a, b;
    for (int i = 0; i < n; ++i) {
        if (id[x[i]].count(y[i] + 2)) {
            int j = id[x[i]][y[i] + 2];
            dsu.merge(i, j);
            u.push_back(i);
            v.push_back(j);
            if (x[i] == 6) {
                a.push_back(x[i] + 1);
                b.push_back(y[i] + 1);
                vis[x[i] + 1][y[i] + 1] = 1;
            } else if (x[i] == 2) {
                a.push_back(x[i] - 1);
                b.push_back(y[i] + 1);
                vis[x[i] - 1][y[i] + 1] = 1;
            } else {
                if ((y[i] / 2) % 2) {
                    a.push_back(x[i] + 1);
                    b.push_back(y[i] + 1);
                    vis[x[i] + 1][y[i] + 1] = 1;
                } else {
                    a.push_back(x[i] - 1);
                    b.push_back(y[i] + 1);
                    vis[x[i] - 1][y[i] + 1] = 1;
                }
            }
        }
    }

    for (int i = 0; i < n; ++i) {
        if (id[x[i] + 2].count(y[i])) {
            int j = id[x[i] + 2][y[i]];
            if (dsu.same(i, j) == 0) {
                u.push_back(i);
                v.push_back(j);
                dsu.merge(i, j);
                if (vis[x[i] + 1][y[i] - 1] == 0) {
                    a.push_back(x[i] + 1);
                    b.push_back(y[i] - 1);
                    vis[x[i] + 1][y[i] - 1] = 1;
                } else {
                    a.push_back(x[i] + 1);
                    b.push_back(y[i] + 1);
                    vis[x[i] + 1][y[i] + 1] = 1;
                }
            }
        }

        if (id[x[i] - 2].count(y[i])) {
            int j = id[x[i] - 2][y[i]];
            if (dsu.same(i, j) == 0) {
                u.push_back(i);
                v.push_back(j);
                dsu.merge(i, j);
                if (vis[x[i] - 1][y[i] - 1]) {
                    a.push_back(x[i] - 1);
                    b.push_back(y[i] - 1);
                    vis[x[i] - 1][y[i] - 1] = 1;
                } else {
                    a.push_back(x[i] - 1);
                    b.push_back(y[i] + 1);
                    vis[x[i] - 1][y[i] + 1] = 1;
                }
            }
        }
    }

    if (dsu.cnt == 1) {
        build(u, v, a, b);
        return 1;
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
17 Correct 9 ms 19036 KB Output is correct
18 Incorrect 8 ms 19220 KB Tree @(3, 5) appears more than once: for edges on positions 0 and 2
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
17 Correct 9 ms 19036 KB Output is correct
18 Incorrect 8 ms 19220 KB Tree @(3, 5) appears more than once: for edges on positions 0 and 2
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
17 Correct 8 ms 19036 KB Output is correct
18 Correct 8 ms 19204 KB Output is correct
19 Correct 9 ms 19056 KB Output is correct
20 Incorrect 211 ms 53276 KB Tree @(64281, 135721) appears more than once: for edges on positions 91762 and 100001
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
17 Incorrect 262 ms 56232 KB Tree @(100001, 100001) appears more than once: for edges on positions 90476 and 165167
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19036 KB Output is correct
2 Correct 9 ms 19192 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 8 ms 19036 KB Output is correct
5 Correct 8 ms 19036 KB Output is correct
6 Correct 9 ms 19124 KB Output is correct
7 Correct 8 ms 19168 KB Output is correct
8 Correct 8 ms 19036 KB Output is correct
9 Correct 138 ms 36280 KB Output is correct
10 Correct 14 ms 20992 KB Output is correct
11 Correct 46 ms 28356 KB Output is correct
12 Correct 20 ms 21692 KB Output is correct
13 Correct 31 ms 25296 KB Output is correct
14 Correct 9 ms 19292 KB Output is correct
15 Correct 9 ms 19288 KB Output is correct
16 Correct 135 ms 36276 KB Output is correct
17 Correct 9 ms 19036 KB Output is correct
18 Incorrect 8 ms 19220 KB Tree @(3, 5) appears more than once: for edges on positions 0 and 2
19 Halted 0 ms 0 KB -