Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e5 + 1;
- int n, m, q;
- int cost [N];
- set<pair<int, pair<int, pair<int, int>>>, greater<>> ans;
- vector<pair<int, int>> sv;
- int32_t main() {
- ifstream test("test.txt");
- ios::sync_with_stdio(false);
- cin.tie(nullptr); cout.tie(nullptr);
- cin >> n >> m >> q;
- for(int i = 1; i <= n; i++) {
- cin >> cost[i];
- sv.emplace_back(cost[i], i);
- }
- sort(sv.begin(), sv.end(), greater<>());
- set<pair<int, int>> inp;
- while(m--){
- int u, v;
- cin >> u >> v;
- if(u > v)
- swap(u, v);
- inp.emplace(u, v);
- }
- for(int i = 1; i <= n; i++) {
- for (int j = i + 1; j <= n; j++) {
- if(inp.find({i, j}) != inp.end())
- continue;
- pair<int, int> rez = {i, j};
- int now = 0;
- while (rez.first == sv[now].second || rez.second == sv[now].second)
- now++;
- pair<int, pair<int, int>> s;
- s.first = i;
- s.second.first = j;
- s.second.second = sv[now].second;
- ans.emplace(cost[i] + cost[j] + sv[now].first, s);
- }
- }
- while(q--){
- int tp, u, v;
- cin >> tp >> u >> v;
- if(u > v)
- swap(u, v);
- pair<int, int> rez = {u, v};
- int now = 0;
- while(rez.first == sv[now].second || rez.second == sv[now].second)
- now++;
- pair<int, pair<int, int>> s;
- s.first = u;
- s.second.first = v;
- s.second.second = sv[now].second;
- if(tp == 1)
- ans.erase(ans.find({cost[u] + cost[v] + sv[now].first, s}));
- else
- ans.emplace(cost[u] + cost[v] + sv[now].first, s);
- if(ans.empty()){
- cout << "0\n";
- continue;
- }
- cout << ans.begin()->first << '\n';
- }
- }
Add Comment
Please, Sign In to add comment