Submission #636545

#TimeUsernameProblemLanguageResultExecution timeMemory
636545MohamedFaresNebiliBridges (APIO19_bridges)C++14
0 / 100
498 ms524288 KiB
#include <bits/stdc++.h> using namespace std; const int INF = INT32_MAX; const int LOG = 17; int N, M, Q, par[50005], dep[50005]; int timer, tin[200005], out[200005]; int lazy[200005], ST[200005]; vector<array<int, 2>> E; vector<pair<int, int>> adj[50005]; void prop(int v, int l, int r) { if(l == r) return; lazy[v * 2] = min(lazy[v * 2], lazy[v]); ST[v * 2] = min(ST[v * 2], lazy[v]); lazy[v * 2 + 1] = min(lazy[v * 2 + 1], lazy[v]); ST[v * 2 + 1] = min(ST[v * 2 + 1], lazy[v]); lazy[v] = INF; } void update(int v, int l, int r, int lo, int hi, int val) { prop(v, l, r); if(l > hi || r < lo) return; if(l >= lo && r <= hi) { ST[v] = min(ST[v], val); lazy[v] = min(lazy[v], val); prop(v, l, r); return; } update(v * 2, l, (l + r) / 2, lo, hi, val); update(v * 2 + 1, (l + r) / 2 + 1, r, lo, hi, val); ST[v] = min(ST[v * 2], ST[v * 2 + 1]); } int query(int v, int l, int r, int lo, int hi, int val) { prop(v, l, r); if(l > hi || r < lo || ST[v] < val) return 0; if(ST[v] >= val) return max(0, max(l, lo) - min(r, hi) + 1); return query(v * 2, l, (l + r) / 2, lo, hi, val) + query(v * 2 + 1, (l + r) / 2 + 1, r, lo, hi, val); } void dfs(int v, int p) { par[v] = p; tin[v] = ++timer; for(auto u : adj[v]) { if(u.first == p) continue; dep[u.first] = u.second; dfs(u.first, v); } out[v] = timer; update(1, 1, N, tin[v] + 1, out[v], dep[v]); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M; for(int l = 0; l < M; l++) { int U, V, D; cin >> U >> V >> D; if(U > V) swap(U, V); E.push_back({U, V}); adj[U].push_back({V, D}); adj[V].push_back({U, D}); } dep[1] = INF; dfs(1, 1); cin >> Q; while(Q--) { int t; cin >> t; if(t == 1) { int B, R; cin >> B >> R; --B; int U = E[B][0], V = E[B][1]; update(1, 1, N, tin[V] + 1, out[V], R); } if(t == 2) { int S, W; cin >> S >> W; while(S != 1 && dep[S] >= W) S = par[S]; cout << 1 + query(1, 1, N, tin[S] + 1, out[S], W) << "\n"; } } return 0; }

Compilation message (stderr)

bridges.cpp: In function 'int32_t main()':
bridges.cpp:56:21: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   56 |                     if(U > V) swap(U, V); E.push_back({U, V});
      |                     ^~
bridges.cpp:56:43: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   56 |                     if(U > V) swap(U, V); E.push_back({U, V});
      |                                           ^
bridges.cpp:65:29: warning: unused variable 'U' [-Wunused-variable]
   65 |                         int U = E[B][0], V = E[B][1];
      |                             ^
#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...