Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using ull = unsigned long long;
- const int MAXN = 1e5 + 1;
- struct d {
- ll s = -2;
- };
- vector<unordered_set<int>> v;
- unordered_map <int, unordered_map<int, d>> cost;
- void solve() {
- ios::sync_with_stdio(false);
- cin.tie(NULL);
- int n, m;
- cin >> n >> m;
- v.resize(n + 1);
- for (int i = 0; i < m; i++) {
- int a, b;
- ll c;
- cin >> a >> b >> c;
- v[a].insert(b);
- v[b].insert(a);
- cost[a][b].s = c;
- cost[b][a].s = c;
- }
- int q;
- cin >> q;
- for (int j = 0; j < q; j++) {
- int key;
- cin >> key;
- if (key == 1) {
- int a, b;
- ll c;
- cin >> a >> b >> c;
- v[a].insert(b);
- v[b].insert(a);
- cost[a][b].s = c;
- cost[b][a].s = c;
- }
- if (key == 2) {
- int a, b;
- cin >> a >> b;
- cost[a][b].s = -2;
- cost[b][a].s = -2;
- }
- if (key == 3) {
- int a, b;
- cin >> a >> b;
- vector<ll> w;
- ll ans = LONG_LONG_MAX;
- for (auto i : v[a]) {
- if (i == b) {
- if (cost[a][i].s != -2) {
- ans = min(ans, cost[a][i].s);
- w.emplace_back(cost[a][i].s);
- }
- continue;
- }
- else {
- if ((cost[a][i].s != -2 && cost[i][b].s != -2)) {
- ll sum = cost[a][i].s + cost[i][b].s;
- ans = min(ans, sum);
- w.emplace_back(sum);
- }
- }
- }
- if (w.empty()) {
- ans = -1;
- }
- cout << ans << endl;
- }
- }
- }
- int main() {
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement