Submission #716518

#TimeUsernameProblemLanguageResultExecution timeMemory
7165181zaid1Bridges (APIO19_bridges)C++17
0 / 100
942 ms117192 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' const int M = 3e6+5, MOD = 998244353; vector<int> node[M], tmp; int vis[M], ind[M]; void dfs(int s) { vis[s] = true; for (auto i:node[s]) { if (!vis[i]) dfs(i); } tmp.push_back(s); } int N = 1 << 20; int seg[M]; void update(int ind) { while (ind /= 2) seg[ind] = min(seg[ind*2], seg[ind*2+1]); } int query(int L, int R, int l = 1, int r = N, int ind = 1) { if (r < L || l > R) return INT_MAX; if (L <= l && r <= R) return seg[ind]; return min(query(L, R, l, (l+r)/2, ind*2), query(L, R, (l+r)/2+1, r, ind*2+1)); } signed main() { cin.tie(0)->sync_with_stdio(0); for (int &i:seg) i = INT_MAX; int n, m; cin >> n >> m; vector<array<int, 3>> E; map<pair<int, int>, int> e; for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; node[a].push_back(b); node[b].push_back(a); E.push_back({a, b, c}); e[{a, b}] = e[{b, a}] = c; } int f = 0; for (int i = 1; i <= n; i++) if (node[i].size() == 1) f = i; dfs(f); for (int i = 0; i < n-1; i++) { seg[i+N] = e[{tmp[i], tmp[i+1]}]; update(i+N); } for (int i = 0; i < n; i++) ind[tmp[i]] = i; int q; cin >> q; while (q--) { int x, y; cin >> x; if (x == 1) { cin >> x >> y; auto [a, b, c] = E[x-1]; seg[min(ind[a], ind[b])+N] = y; update(min(ind[a], ind[b]) + N); } else { cin >> x >> y; int ans = 0; if (ind[x] != n-1) { int l = -1, p = (1<<20); while (p /= 2) { if (ind[x]+l+p+1 >= n) continue; if (query(ind[x]+1, ind[x]+l+p+1) >= y) l += p; } ans += l+2; } if (ind[x]) { int l = 0, p = (1<<20); while (p /= 2) { if (ind[x]-(l+p) < 0) continue; if (query(ind[x]-(l+p)+1, ind[x]) >= y) l += p; } ans += l; } cout << ans << endl; } } return 0; } /* 5 4 1 3 1 3 5 2 5 4 3 4 2 4 -1 2 5 2 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...