Submission #588783

#TimeUsernameProblemLanguageResultExecution timeMemory
588783SeDunionSprinkler (JOI22_sprinkler)C++17
9 / 100
570 ms96628 KiB
#include<iostream> #include<vector> using namespace std; using ll = long long; const int N = 5e5 + 123; const int LOG = 20; const int D = 41; ll h[N], q[N][D]; int n, L; void mult(ll &a, ll b) { a *= b; a %= L; } vector<int>g[N]; int pr[N]; void dfs(int v) { for (int to : g[v]) if (to != pr[v]) { pr[to] = v; dfs(to); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> L; for (int i = 1 ; i < n ; ++ i) { int a, b; cin >> a >> b; g[a].emplace_back(b); g[b].emplace_back(a); } dfs(1); for (int i = 1 ; i <= n ; ++ i) { cin >> h[i]; for (int j = 0 ; j <= 40 ; ++ j) { q[i][j] = 1; } } int qq; cin >> qq; for (int i = 0 ; i < qq ; ++ i) { int t, x, d, w; cin >> t; if (t == 1) { cin >> x >> d >> w; for (int i = d ; i >= 0 ; -- i) { mult(q[x][i], w); } for (int i = 0 ; i <= d ; ++ i) { mult(h[x], w); if (x == 1) break; x = pr[x]; } } else { cin >> x; ll ans = h[x]; for (int i = 1 ; i <= 40 ; ++ i) { if (x == 1) break; x = pr[x]; mult(ans, q[x][i]); } cout << ans << "\n"; } } }
#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...