ProgMe

Untitled

Dec 20th, 2020 (edited)
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 2e5 + 1;
  6.  
  7.  
  8. int n, m, q;
  9. int cost [N];
  10. set<pair<int, pair<int, pair<int, int>>>, greater<>> ans;
  11. vector<pair<int, int>> sv;
  12.  
  13. int32_t main() {
  14. ifstream test("test.txt");
  15. ios::sync_with_stdio(false);
  16. cin.tie(nullptr); cout.tie(nullptr);
  17. cin >> n >> m >> q;
  18. for(int i = 1; i <= n; i++) {
  19. cin >> cost[i];
  20. sv.emplace_back(cost[i], i);
  21. }
  22. sort(sv.begin(), sv.end(), greater<>());
  23. set<pair<int, int>> inp;
  24. while(m--){
  25. int u, v;
  26. cin >> u >> v;
  27. if(u > v)
  28. swap(u, v);
  29. inp.emplace(u, v);
  30. }
  31. for(int i = 1; i <= n; i++) {
  32. for (int j = i + 1; j <= n; j++) {
  33. if(inp.find({i, j}) != inp.end())
  34. continue;
  35. pair<int, int> rez = {i, j};
  36. int now = 0;
  37. while (rez.first == sv[now].second || rez.second == sv[now].second)
  38. now++;
  39. pair<int, pair<int, int>> s;
  40. s.first = i;
  41. s.second.first = j;
  42. s.second.second = sv[now].second;
  43. ans.emplace(cost[i] + cost[j] + sv[now].first, s);
  44. }
  45. }
  46. while(q--){
  47. int tp, u, v;
  48. cin >> tp >> u >> v;
  49. if(u > v)
  50. swap(u, v);
  51. pair<int, int> rez = {u, v};
  52. int now = 0;
  53. while(rez.first == sv[now].second || rez.second == sv[now].second)
  54. now++;
  55. pair<int, pair<int, int>> s;
  56. s.first = u;
  57. s.second.first = v;
  58. s.second.second = sv[now].second;
  59. if(tp == 1)
  60. ans.erase(ans.find({cost[u] + cost[v] + sv[now].first, s}));
  61. else
  62. ans.emplace(cost[u] + cost[v] + sv[now].first, s);
  63. if(ans.empty()){
  64. cout << "0\n";
  65. continue;
  66. }
  67. cout << ans.begin()->first << '\n';
  68. }
  69. }
Add Comment
Please, Sign In to add comment