Submission #964306

#TimeUsernameProblemLanguageResultExecution timeMemory
964306rolandpetreanSprinkler (JOI22_sprinkler)C++17
100 / 100
850 ms97504 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll #define endl '\n' #define pb push_back using pi = array<int, 2>; const int N = 2e5 + 100; vector<int> adj[N]; int par[N]; const int D = 42; int h[N], wch[D][N]; void dfs(int u) { for (int v : adj[u]) { if (v == par[u]) continue; par[v] = u; dfs(v); } } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, l; cin >> n >> l; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } for (int i = 0; i <= n + D; ++i) { for (int d = 0; d < D; ++d) wch[d][i] = 1; } for (int d = 0; d < D - 1; ++d) { int here = n + d + 1; adj[here].pb(here + 1); adj[here + 1].pb(here); } adj[n + D].pb(1); adj[1].pb(n + D); dfs(n + 1); for (int i = 1; i <= n; ++i) cin >> h[i]; int q; cin >> q; while (q--) { int t; cin >> t; if (t == 1) { int u, d, w; cin >> u >> d >> w; auto mult = [&](int& var) { var = var * w % l; }; int p = u; for (int i = 0; i <= d; ++i) { int descend = d - i; mult(wch[descend][p]); if (descend > 0) mult(wch[descend - 1][p]); p = par[p]; } } else { int u; cin >> u; //cout << u << "!\n"; int p = u; int ans = h[u]; for (int d = 0; d < D; ++d) { //cout << p << " | " << d << " | " << wch[d][p] << endl; ans = ans * wch[d][p] % l; p = par[p]; } cout << ans << endl; } } } /* 4 7 1 2 2 3 3 4 1 1 1 1 5 1 4 8 2 2 1 2 2 2 3 2 4 */
#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...