제출 #964299

#제출 시각아이디문제언어결과실행 시간메모리
964299rolandpetreanSprinkler (JOI22_sprinkler)C++17
9 / 100
583 ms97368 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 + 5; 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; ++i) { for (int d = 0; d < D; ++d) wch[d][i] = 1; } dfs(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[u]; } } else { int u; cin >> u; int p = u; int ans = h[u]; for (int d = 0; d < D; ++d) { ans = ans * wch[d][p] % l; p = par[p]; } cout << ans << endl; } } }
#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...