Submission #101832


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Query {
    int type;
    int e, v, w;
};

int root(int x, vector<int> &roots) {
    if(roots[x] == x) return x;
    return roots[x] = root(roots[x], roots);
}

void unite(int x, int y, vector<int> &roots) {
    x = root(x, roots);
    y = root(y, roots);
    if(x == y) return;
    roots[x] = y;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(0);

    int N, M, K;
    cin >> N >> M >> K;
    vector<int> roots(N);
    vector<pair<int,int> > edges(M);
    vector<int> remains(M, 1);
    vector<Query> queries(K);
    for(int i = 0; i < N; ++i) {
        roots[i] = i;
    }
    for(int i = 0; i < M; ++i) {
        cin >> edges[i].first >> edges[i].second;
        edges[i].first--;
        edges[i].second--;
    }
    for(int i = 0; i < K; ++i) {
        cin >> queries[i].type;
        if(queries[i].type == 0) {
            cin >> queries[i].e;
            queries[i].e--;
            remains[queries[i].e] = 0;
        } else {
            cin >> queries[i].v >> queries[i].w;
            queries[i].v--;
            queries[i].w--;
        }
    }
    for(int i = 0; i < M; ++i) {
        if(remains[i]) {
            unite(edges[i].first, edges[i].second, roots);
        }
    }
    reverse(queries.begin(), queries.end());
    vector<int> res;
    for(const Query &q : queries) {
        if(q.type == 0) {
            const pair<int,int> &e = edges[q.e];
            unite(e.first, e.second, roots);
        } else {
            if(root(q.v, roots) == root(q.w, roots)) {
                res.push_back(1);
            } else {
                res.push_back(0);
            }
        }
    }
    reverse(res.begin(), res.end());
    for(int n : res) {
        cout << (n ? "YES" : "NO") << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task D - Graph Destruction
User binding_pry
Language C++11 (GCC 4.8.1)
Score 100
Code Size 1904 Byte
Status AC
Exec Time 395 ms
Memory 4640 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 37
Set Name Test Cases
All 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 4, 5, 50, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 21 ms 804 KB
10 AC 28 ms 928 KB
11 AC 58 ms 1192 KB
12 AC 138 ms 1832 KB
13 AC 250 ms 2720 KB
14 AC 356 ms 3356 KB
15 AC 376 ms 3992 KB
16 AC 395 ms 4640 KB
17 AC 133 ms 1956 KB
18 AC 118 ms 1824 KB
19 AC 149 ms 2080 KB
2 AC 20 ms 804 KB
20 AC 212 ms 2720 KB
21 AC 150 ms 2088 KB
22 AC 210 ms 2600 KB
23 AC 155 ms 2092 KB
24 AC 105 ms 1696 KB
25 AC 123 ms 1832 KB
26 AC 301 ms 3680 KB
27 AC 103 ms 1692 KB
28 AC 113 ms 1824 KB
29 AC 247 ms 2976 KB
3 AC 22 ms 804 KB
30 AC 180 ms 2348 KB
31 AC 297 ms 3488 KB
32 AC 240 ms 2984 KB
33 AC 256 ms 3108 KB
34 AC 301 ms 3696 KB
35 AC 282 ms 3228 KB
36 AC 138 ms 1956 KB
4 AC 22 ms 740 KB
5 AC 20 ms 928 KB
50 AC 291 ms 3492 KB
6 AC 21 ms 804 KB
7 AC 22 ms 796 KB
8 AC 24 ms 812 KB
9 AC 26 ms 844 KB