prestige

Untitled

Apr 15th, 2013
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. using namespace std;
  5. int n, m, q;
  6. vector<pair<int, int> > kab;
  7. vector<int> parent(1001);
  8. vector<int> r(1001);
  9. void make_set (int v) {
  10. parent[v] = v;
  11. r[v] = 0;
  12. }
  13.  
  14. int find_set (int v) {
  15. if (v == parent[v])
  16. return v;
  17. return parent[v] = find_set (parent[v]);
  18. }
  19.  
  20. void union_sets (int a, int b) {
  21. a = find_set (a);
  22. b = find_set (b);
  23. if (a != b) {
  24. if (r[a] < r[b])
  25. swap (a, b);
  26. parent[b] = a;
  27. if (r[a] == r[b])
  28. ++r[a];
  29. }
  30. }
  31. void rebuild (int a, int b) {
  32. for (int i = 0; i < n; i++) {
  33. parent[i] = i;
  34. r[i] = 0;
  35. }
  36. for (int i = 0; i < kab.size(); i++) {
  37. if (a <= i && i <= b) {
  38. continue;
  39. } else {
  40. union_sets(kab[i].first, kab[i].second);
  41. }
  42. }
  43. }
  44. int main () {
  45. cin >> n >>m ;
  46. for (int i = 0; i < m; i++) {
  47. int t1, t2;
  48. cin >> t1 >> t2;
  49. t1--, t2--;
  50. kab.push_back(make_pair(t1, t2));
  51. // union_sets(t1, t2);
  52. }
  53. cin >> q;
  54. for (int i = 0; i < q; i++) {
  55. int t1, t2;
  56. set<int> ans;
  57. cin >> t1 >> t2;
  58. t1--, t2--;
  59. rebuild(t1, t2);
  60. for (int j = 0; j < n; j++) {
  61. ans.insert(find_set(j));
  62. }
  63. cout << ans.size() << endl;
  64. }
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment