fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5.  
  6. vector<ll> clrs;
  7. vector<vector<pair<ll, ll>>> adj;
  8. ll cost = 0;
  9.  
  10. void solve() {
  11. ll n, q; cin >> n >> q;
  12. clrs.assign(n + 1, 0);
  13. adj.assign(n + 1, vector<pair<ll, ll>>());
  14. cost = 0;
  15.  
  16. for (ll i = 1; i <= n; i++) {
  17. cin >> clrs[i];
  18. }
  19.  
  20. for(ll i = 0; i < n -1; i++) {
  21. ll u, v, c; cin >> u >> v >> c;
  22. adj[u].push_back({v, c});
  23. adj[v].push_back({u, c});
  24. if (clrs[u] != clrs[v]) {
  25. cost += c;
  26. }
  27. }
  28. while(q--) {
  29. ll p, x; cin >> p >> x;
  30. ll oldClr = clrs[p];
  31. for (auto [v, w] : adj[p]) {
  32. if (oldClr != clrs[v]) cost -= w;
  33. if (x != clrs[v]) cost += w;
  34. }
  35. clrs[p] = x;
  36. cout << cost << '\n';
  37. }
  38. }
  39.  
  40. int main() {
  41. ll t; cin >> t;
  42. while(t--) {
  43. solve();
  44. }
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5288KB
stdin
4
1 1
1
1 1
2 3
1 1
1 2 10
1 2
2 2
1 1
5 4
1 2 1 2 3
1 2 5
2 3 3
2 4 4
4 5 7
3 2
5 2
1 2
2 3
4 3
1 1 2 2
1 2 2
2 3 6
2 4 8
3 1
4 1
2 2
stdout
0
10
0
10
12
5
0
12
8
0
16