Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. typedef long long ll;
  4. typedef long double ld;
  5.  
  6. #define pb push_back
  7. #define rs resize
  8. #define X first
  9. #define Y second
  10.  
  11. #define vi vector<int>
  12. #define vvi vector<vector<int> >
  13. #define vpii vector<pair<int, int> >
  14. #define all(x) x.begin(), x.end()
  15.  
  16. using namespace std;
  17.  
  18. void read(){
  19. freopen("pudge.in", "r", stdin);
  20. freopen("pudge.out", "w", stdout);
  21. }
  22. void faster(){
  23. ios_base::sync_with_stdio(false);
  24. cin.tie(0);
  25. cout.tie(0);
  26. }
  27.  
  28. int MAXN = 500010;
  29. vi p(MAXN), s(MAXN), a(MAXN);
  30.  
  31. int f(int x){
  32. if (p[x] == x)
  33. return x;
  34. return p[x] = f(p[x]);
  35. }
  36.  
  37. void kek(int x, int y){
  38. x = f(x), y = f(y);
  39. if (s[x] < s[y])
  40. swap(x, y);
  41. if (x != y)
  42. p[y] = x, s[x] += s[y];
  43. }
  44.  
  45. void pudge(){
  46. int n, m, k, x, y, cur;
  47. cin >> n >> m;
  48. vi is_bad(m + 1, 0);
  49. for (int i = 1; i <= n; i++)
  50. p[i] = i, s[i] = 1;
  51. vpii g;
  52. for (int i = 1; i <= m; i++){
  53. cin >> x >> y;
  54. g.pb({x, y});
  55. }
  56. vi que, ans;
  57. cin >> k;
  58. cur = n;
  59. for (int i = 1; i <= k; i++){
  60. cin >> x;
  61. que.pb(x);
  62. is_bad[x] = 1;
  63. }
  64. for (int i = 1; i <= m; i++){
  65. if (!is_bad[i]){
  66. x = g[i - 1].X, y = g[i - 1].Y;
  67. if (f(x) != f(y))
  68. cur--;
  69. kek(x, y);
  70. }
  71. }
  72. reverse(all(que));
  73. for (int i = 0; i < k; i++){
  74. ans.pb(cur);
  75. x = g[i].X, y = g[i].Y;
  76. if (f(x) != f(y)){
  77. cur--;
  78. }
  79. kek(x, y);
  80. }
  81. reverse(all(ans));
  82. for (int i : ans)
  83. cout << i << " ";
  84. }
  85.  
  86. int main(){
  87.  
  88. read();
  89.  
  90. faster();
  91.  
  92. pudge();
  93.  
  94. return 0;
  95. }
  96.  
  97. /*
  98. 4 4
  99. 1 2
  100. 2 3
  101. 1 3
  102. 3 4
  103. 3
  104. 2 4 3
  105.  
  106. 1 2 3
  107.  
  108. 3 1
  109. 1 2
  110. 1
  111. 1
  112.  
  113. 1
  114. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement