제출 #1117765

#제출 시각아이디문제언어결과실행 시간메모리
1117765Zero_OPSprinkler (JOI22_sprinkler)C++14
100 / 100
1022 ms71856 KiB
#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); #ifdef LOCAL freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); #endif // LOCAL int N, L; cin >> N >> L; vector<vector<int>> adj(N + 41); for(int i = 1; i < N; ++i){ int u, v; cin >> u >> v; --u, --v; u += 41; v += 41; adj[u].emplace_back(v); adj[v].emplace_back(u); } for(int i = 1; i <= 41; ++i){ adj[i - 1].emplace_back(i); } vector<int> H(N + 41), par(N + 41, -1); for(int i = 0; i < N; ++i) cin >> H[i + 41]; vector<vector<int>> f(41, vector<int>(N + 41, 1)); function<void(int, int)> dfs = [&](int u, int p){ for(int v : adj[u]) if(v != p){ par[v] = u; // cout << v << " : " << u << '\n'; dfs(v, u); } }; dfs(0, -1); int Q; cin >> Q; while(Q--){ int type; cin >> type; if(type == 1){ int x, d, w; cin >> x >> d >> w; --x; x += 41; for(int i = d; i >= 0; --i){ assert(x != -1); f[i][x] = 1LL * f[i][x] * w % L; // cout << "update : " << i << ' ' << x - 41 << " : " << f[i][x] << '\n'; if(i > 0) f[i - 1][x] = 1ll * f[i - 1][x] * w % L; x = par[x]; } // cout << '\n'; } else{ int x; cin >> x; --x; x += 41; int res = H[x]; for(int i = 0; i <= 40; ++i){ assert(x != -1); // cout << i << " - " << x - 41 << " -> " << f[i][x] << '\n'; res = 1LL * res * f[i][x] % L; x = par[x]; } cout << res << '\n'; } } return 0; }
#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...