답안 #140587

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
140587 2019-08-03T16:00:03 Z khrbuddy03 문명 (KOI17_civilization) C++14
54 / 100
1000 ms 54540 KB
#include <bits/stdc++.h>

using namespace std;

const int inf = 2e3 + 9;
const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, -1, 1};

struct ds {
    int par[inf * inf], siz[inf * inf];
    int find(int u) {
        if (u == par[u]) return u;
        return par[u] = find(par[u]);
    }
    void merge(int u, int v) {
        u = find(u); v = find(v);
        if (u == v) return;
        par[u] = v;
        siz[v] += siz[u];
        siz[u] = 0;
    }
} cul;

int n, m;
int vis[inf][inf];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n * n; i++) cul.par[i] = i;
    fill(&cul.siz[0], &cul.siz[n * n - 1], 0);
    fill(&vis[0][0], &vis[n - 1][n - 1], -1);
    queue<pair<int, pair<int, int>>> q;
    for (int i = 0; i < m; i++) {
        int x, y; cin >> x >> y;
        cul.siz[--y * n + --x] = 1;
        q.push(make_pair(0, make_pair(y, x)));
        vis[y][x] = y * n + x;
    }
    while (!q.empty()) {
        int dist = q.front().first;
        int y = q.front().second.first, x = q.front().second.second;
        int here = y * n + x;
        q.pop();
        cul.merge(here, vis[y][x]);
        for (int i = 0; i < 4; i++) {
            int ny = y + dy[i], nx = x + dx[i];
            if (ny < 0 || ny >= n || nx < 0 || nx >= n) continue;
            int there = ny * n + nx;
            if (cul.siz[cul.find(there)] && cul.siz[cul.find(here)]) cul.merge(there, here);
            if (vis[ny][nx] == -1) {
                q.push(make_pair(dist + 1, make_pair(ny, nx)));
                vis[ny][nx] = here;
            }
        }
        if (cul.siz[cul.find(here)] == m) {
            cout << dist << '\n';
            break;
        }
    }
}

# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1144 KB Output is correct
2 Correct 3 ms 1144 KB Output is correct
3 Correct 4 ms 1272 KB Output is correct
4 Correct 0 ms 1144 KB Output is correct
5 Correct 3 ms 1272 KB Output is correct
6 Correct 3 ms 1272 KB Output is correct
7 Correct 3 ms 1164 KB Output is correct
8 Correct 3 ms 1276 KB Output is correct
9 Correct 4 ms 1272 KB Output is correct
10 Correct 3 ms 1272 KB Output is correct
11 Correct 3 ms 1272 KB Output is correct
12 Correct 4 ms 1272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1144 KB Output is correct
2 Correct 3 ms 1144 KB Output is correct
3 Correct 4 ms 1272 KB Output is correct
4 Correct 0 ms 1144 KB Output is correct
5 Correct 3 ms 1272 KB Output is correct
6 Correct 3 ms 1272 KB Output is correct
7 Correct 3 ms 1164 KB Output is correct
8 Correct 3 ms 1276 KB Output is correct
9 Correct 4 ms 1272 KB Output is correct
10 Correct 3 ms 1272 KB Output is correct
11 Correct 3 ms 1272 KB Output is correct
12 Correct 109 ms 16152 KB Output is correct
13 Correct 82 ms 16120 KB Output is correct
14 Correct 103 ms 16112 KB Output is correct
15 Correct 73 ms 15992 KB Output is correct
16 Correct 24 ms 15992 KB Output is correct
17 Correct 315 ms 21112 KB Output is correct
18 Correct 326 ms 20984 KB Output is correct
19 Correct 325 ms 20984 KB Output is correct
20 Correct 349 ms 20992 KB Output is correct
21 Correct 320 ms 20984 KB Output is correct
22 Correct 17 ms 16120 KB Output is correct
23 Correct 125 ms 16248 KB Output is correct
24 Correct 4 ms 1272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1144 KB Output is correct
2 Correct 3 ms 1144 KB Output is correct
3 Correct 4 ms 1272 KB Output is correct
4 Correct 0 ms 1144 KB Output is correct
5 Correct 3 ms 1272 KB Output is correct
6 Correct 3 ms 1272 KB Output is correct
7 Correct 3 ms 1164 KB Output is correct
8 Correct 3 ms 1276 KB Output is correct
9 Correct 4 ms 1272 KB Output is correct
10 Correct 3 ms 1272 KB Output is correct
11 Correct 3 ms 1272 KB Output is correct
12 Correct 109 ms 16152 KB Output is correct
13 Correct 82 ms 16120 KB Output is correct
14 Correct 103 ms 16112 KB Output is correct
15 Correct 73 ms 15992 KB Output is correct
16 Correct 24 ms 15992 KB Output is correct
17 Correct 315 ms 21112 KB Output is correct
18 Correct 326 ms 20984 KB Output is correct
19 Correct 325 ms 20984 KB Output is correct
20 Correct 349 ms 20992 KB Output is correct
21 Correct 320 ms 20984 KB Output is correct
22 Correct 17 ms 16120 KB Output is correct
23 Correct 125 ms 16248 KB Output is correct
24 Correct 328 ms 47720 KB Output is correct
25 Correct 406 ms 47480 KB Output is correct
26 Correct 284 ms 47608 KB Output is correct
27 Correct 307 ms 47480 KB Output is correct
28 Correct 261 ms 47652 KB Output is correct
29 Execution timed out 1041 ms 54540 KB Time limit exceeded
30 Halted 0 ms 0 KB -