fork download
  1. #include <bits/stdc++.h>
  2. #define FOR(i, a, b) for(int i = a; i <= b; i++)
  3. #define FOD(i, a, b) for(int i = a; i >= b; i--)
  4. #define fi first
  5. #define se second
  6. #define file(name) if(fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
  7. #define maxn int(1e6 + 5)
  8.  
  9. using namespace std;
  10.  
  11. typedef long long ll;
  12. typedef pair<int, int> pii;
  13.  
  14. int n, k, a[maxn], b[maxn], Min[maxn], r[maxn], sz[maxn];
  15.  
  16. ll sum, res[maxn];
  17.  
  18. bool cycle[maxn];
  19.  
  20. pii e[maxn];
  21.  
  22. int get(int u) {
  23. return (r[u] == u ? u : r[u] = get(r[u]));
  24. }
  25.  
  26. void join(int u, int v) {
  27. u = get(u), v = get(v);
  28. if(u == v) {
  29. if(!cycle[u]) {
  30. cycle[u] = 1;
  31. sum += Min[u];
  32. }
  33. return;
  34. }
  35. sum += cycle[u] ? 0 : Min[u];
  36. sum += cycle[v] ? 0 : Min[v];
  37. if(sz[u] < sz[v]) swap(u, v);
  38. r[v] = u;
  39. Min[u] = min(Min[u], Min[v]);
  40. cycle[u] |= cycle[v];
  41. sum -= cycle[u] ? 0 : Min[u];
  42. }
  43.  
  44. int main()
  45. {
  46. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  47. file("khobau");
  48. cin >> n >> k;
  49. FOR(i, 1, n) cin >> a[i];
  50. FOR(i, 1, n) r[i] = i, sz[i] = 1, Min[i] = a[i];
  51. FOR(i, 1, k) cin >> e[i].fi >> e[i].se;
  52. FOR(i, 1, k) cin >> b[i];
  53. FOD(i, k, 1) {
  54. res[i] = sum;
  55. join(e[b[i]].fi, e[b[i]].se);
  56. }
  57. FOR(i, 1, k) cout << res[i] << '\n';
  58. return 0;
  59. }
  60.  
Success #stdin #stdout 0.01s 5272KB
stdin
Standard input is empty
stdout
Standard output is empty