Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 100010;
- int parent[N];
- int siz[N];
- bool isSet[N];
- void make_set(int v)
- {
- parent[v] = v;
- siz[v] = 1;
- }
- int find_set(int v)
- {
- if(v == parent[v])
- return v;
- return parent[v] = find_set(parent[v]);
- }
- void union_set(int a,int b)
- {
- a = find_set(a);
- b = find_set(b);
- if(a != b)
- {
- if(siz[a] < siz[b])
- swap(a,b);
- parent[b] = a;
- siz[a] +=siz[b];
- siz[b] = 0;
- }
- }
- int t;
- int n,m,q;
- int x,y;
- int main()
- {
- ios::sync_with_stdio(0);
- cin.tie(NULL);
- cout.tie(NULL);
- //freopen("input.txt", "r", stdin);
- //freopen("out.txt", "w", stdout);
- //generatePrimes();
- cin >> t;
- while(t--)
- {
- //cin >> b1 >> p1 >> b2 >> p2;
- memset(parent,0,sizeof parent);
- memset(isSet,false,sizeof isSet);
- memset(siz,0,sizeof siz);
- cin >> n >> m >> q;
- for(int i = 0; i < m; i++)
- {
- cin >> x >> y;
- if(!isSet[x])
- make_set(x);
- if(!isSet[y])
- make_set(y);
- isSet[x] = true;
- isSet[y] = true;
- union_set(x,y);
- }
- string ans = "";
- for(int i = 0; i < q; i++)
- {
- cin >> x >> y;
- if(!isSet[x] || !isSet[y])
- cout << "0";
- else
- {
- x = find_set(x);
- y = find_set(y);
- if(x == y)
- cout << "1";
- else
- cout << "0";
- }
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement