Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- using namespace std;
- int n, m, q;
- vector<pair<int, int> > kab;
- vector<int> parent(1001);
- vector<int> r(1001);
- void make_set (int v) {
- parent[v] = v;
- r[v] = 0;
- }
- int find_set (int v) {
- if (v == parent[v])
- return v;
- return parent[v] = find_set (parent[v]);
- }
- void union_sets (int a, int b) {
- a = find_set (a);
- b = find_set (b);
- if (a != b) {
- if (r[a] < r[b])
- swap (a, b);
- parent[b] = a;
- if (r[a] == r[b])
- ++r[a];
- }
- }
- void rebuild (int a, int b) {
- for (int i = 0; i < n; i++) {
- parent[i] = i;
- r[i] = 0;
- }
- for (int i = 0; i < kab.size(); i++) {
- if (a <= i && i <= b) {
- continue;
- } else {
- union_sets(kab[i].first, kab[i].second);
- }
- }
- }
- int main () {
- cin >> n >>m ;
- for (int i = 0; i < m; i++) {
- int t1, t2;
- cin >> t1 >> t2;
- t1--, t2--;
- kab.push_back(make_pair(t1, t2));
- // union_sets(t1, t2);
- }
- cin >> q;
- for (int i = 0; i < q; i++) {
- int t1, t2;
- set<int> ans;
- cin >> t1 >> t2;
- t1--, t2--;
- rebuild(t1, t2);
- for (int j = 0; j < n; j++) {
- ans.insert(find_set(j));
- }
- cout << ans.size() << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment