Submission #486899
Source Code Expand
/* * d.cc: D: */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_M = 100000; const int MAX_K = 100000; /* typedef */ struct UFT { int links[MAX_N], ranks[MAX_N], sizes[MAX_N]; UFT() {} void clear(int n) { for (int i = 0; i < n; i++) links[i] = i, ranks[i] = sizes[i] = 1; } int root(int i) { int i0 = i; while (links[i0] != i0) i0 = links[i0]; return (links[i] = i0); } int rank(int i) { return ranks[root(i)]; } int size(int i) { return sizes[root(i)]; } bool same(int i, int j) { return root(i) == root(j); } int merge(int i0, int i1) { int r0 = root(i0), r1 = root(i1); int mr; if (ranks[r0] == ranks[r1]) { links[r1] = r0; sizes[r0] += sizes[r1]; ranks[r0]++; mr = r0; } else if (ranks[r0] > ranks[r1]) { links[r1] = r0; sizes[r0] += sizes[r1]; mr = r0; } else { links[r0] = r1; sizes[r1] += sizes[r0]; mr = r1; } return mr; } }; struct Edge { int a, b; bool f; }; struct Query { int op, a, b; }; /* global variables */ UFT uft; Edge es[MAX_M]; Query qs[MAX_K]; stack<bool> ans; /* subroutines */ /* main */ int main() { int n, m, k; cin >> n >> m >> k; for (int i = 0; i < m; i++) { cin >> es[i].a >> es[i].b; es[i].a--, es[i].b--, es[i].f = true; } for (int i = 0; i < k; i++) { cin >> qs[i].op; if (qs[i].op == 0) { int j; cin >> j; j--; qs[i].a = es[j].a; qs[i].b = es[j].b; es[j].f = false; } else { cin >> qs[i].a >> qs[i].b; qs[i].a--, qs[i].b--; } } uft.clear(n); for (int i = 0; i < m; i++) if (es[i].f) { int ra = uft.root(es[i].a); int rb = uft.root(es[i].b); if (ra != rb) uft.merge(ra, rb); } for (int i = k - 1; i >= 0; i--) { int ra = uft.root(qs[i].a); int rb = uft.root(qs[i].b); if (qs[i].op == 0) { if (ra != rb) uft.merge(ra, rb); } else { ans.push(ra == rb); } } while (! ans.empty()) { bool f = ans.top(); ans.pop(); cout << (f ? "YES" : "NO") << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Graph Destruction |
User | tnakao |
Language | C (GCC 4.4.7) |
Score | 0 |
Code Size | 2628 Byte |
Status | CE |
Compile Error
./Main.c:5: fatal error: cstdio: No such file or directory compilation terminated.