Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- const int maxn = static_cast<int>(1e5 + 10);
- int size[maxn], parent[maxn], real_ans[maxn];
- int find_set (int v) {
- if (v == parent[v])
- return v;
- return parent[v] = find_set (parent[v]);
- }
- void make_set (int v) {
- parent[v] = v;
- size[v] = 1;
- }
- void union_sets (int a, int b) {
- a = find_set (a);
- b = find_set (b);
- if (a != b) {
- if (size[a] < size[b])
- std::swap (a, b);
- parent[b] = a;
- size[a] += size[b];
- }
- }
- void solution() {
- int n, m;
- scanf("%d%d\n", &n, &m);
- for (int i = 1; i <= n; ++i) {
- make_set(i);
- real_ans[i] = i;
- }
- char str[100];
- std::vector<int> v;
- int cur;
- while (m--) {
- gets(str);
- std::stringstream ss;
- ss << str;
- v.clear();
- while (ss >> cur) {
- v.push_back(cur);
- }
- if (v.size() == 1) {
- printf("%d\n", real_ans[find_set(v.back())]);
- } else {
- //printf("hoba %d %d\n", v[0], v[1]);
- if (real_ans[find_set(v[1])] != v[1] || real_ans[find_set(v[0])] == v[1]) {
- printf("0\n");
- } else {
- union_sets(v[0], v[1]);
- //real_ans[find_set(v[0])] = v[0];
- printf("1\n");
- }
- }
- //for (int i = 1; i <= n; ++i) printf("%d ", real_ans[find_set(i)]);
- //printf("\n");
- }
- }
- int main() {
- solution();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement