답안 #487193

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
487193 2021-11-14T19:09:30 Z MilosMilutinovic 분수 공원 (IOI21_parks) C++17
5 / 100
70 ms 6996 KB
#include "parks.h"
#include <bits/stdc++.h>
using namespace std;

struct ds {
    vector<int> fa;
    ds(int n) {
        fa.resize(n);
        iota(fa.begin(), fa.end(), 0);
    }
    int gfa(int x) {
        return fa[x] == x ? x : fa[x] = gfa(fa[x]);
    }
    void unite(int x, int y) {
        x = gfa(x), y = gfa(y);
        if (x == y) return;
        fa[x] = y;
    }
};

//void build(vector<int> v, vector<int> u, vector<int> a, vector<int> b) {}

int construct_roads(std::vector<int> x, std::vector<int> y) {
    if (x.size() == 1) {
        build({}, {}, {}, {});
        return 1;
    }
    int n = x.size();
    int mn = *min_element(x.begin(), x.end());
    int mx = *min_element(x.begin(), x.end());
    if (mn == 2 && mx == 2) {
        int p[n];
        for (int i = 0; i < n; i++) p[i] = i;
        sort(p, p + n, [&](int i, int j) {
            return y[i] < y[j];
        });
        for (int i = 0; i + 1 < n; i++)
            if (y[p[i]] + 2 != y[p[i + 1]])
                return 0;
        vector<int> u, v, a, b;
        for (int i = 0; i + 1 < n; i++) {
            u.push_back(p[i]);
            v.push_back(p[i + 1]);
            a.push_back(x[i] - 1);
            b.push_back(y[p[i]] + 1);
        }
        build(u, v, a, b);
        return 1;
    }
    if (mn == 2 && mx == 4) {
        map<pair<int, int>, int> id;
        for (int i = 0; i < n; i++) {
            id[{x[i], y[i]}] = i + 1;
        }
        ds d(n);
        for (int i = 0; i < n; i++) {
            if (id[{x[i] + 2, y[i]}]) {
                d.unite(i, id[{x[i] + 2, y[i]}] - 1);
            }
            if (id[{x[i], y[i] + 2}]) {
                d.unite(i, id[{x[i], y[i] + 2}] - 1);
            }
        }
        for (int i = 0; i < n; i++)
            if (d.gfa(i) != d.gfa(0))
                return 0;
        vector<int> u, v, a, b;
        for (int i = 0; i < n; i++) {
            if (id[{x[i] + 2, y[i]}]) {
                u.push_back(i);
                v.push_back(id[{x[i] + 2, y[i]}] - 1);
                a.push_back(x[i] + 1);
                b.push_back(y[i] + 1);
            }
            if (id[{x[i], y[i] + 2}]) {
                u.push_back(i);
                v.push_back(id[{x[i], y[i] + 2}] - 1);
                a.push_back(x[i] == 2 ? x[i] - 1 : x[i] + 1);
                b.push_back(y[i] + 1);
            }
        }
        build(u, v, a, b);
        return 1;
    }
}

Compilation message

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:85:1: warning: control reaches end of non-void function [-Wreturn-type]
   85 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
17 Incorrect 0 ms 204 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
17 Incorrect 0 ms 204 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
17 Correct 0 ms 204 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 0 ms 296 KB Output is correct
20 Incorrect 59 ms 6712 KB Solution announced impossible, but it is possible.
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
17 Incorrect 52 ms 4208 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 70 ms 6972 KB Output is correct
10 Correct 5 ms 1100 KB Output is correct
11 Correct 30 ms 4044 KB Output is correct
12 Correct 7 ms 1484 KB Output is correct
13 Correct 7 ms 1100 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 54 ms 6996 KB Output is correct
17 Incorrect 0 ms 204 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -