Submission #875778

#TimeUsernameProblemLanguageResultExecution timeMemory
875778danikoynovSprinkler (JOI22_sprinkler)C++14
3 / 100
4054 ms58392 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxq = 4e5 + 10; struct query { int type, ver, d, t; ll w; }ask[maxq]; const int maxn = 2e5 + 10; int n, q; ll l, h[maxn]; vector < query > task[maxn]; vector < int > adj[maxn]; bool cmp(query a1, query a2) { return a1.d < a2.d; } void input() { cin >> n >> l; for (int i = 1; i < n; i ++) { int v, u; cin >> v >> u; adj[v].push_back(u); adj[u].push_back(v); } for (int i = 1; i <= n; i ++) cin >> h[i]; cin >> q; for (int i = 1; i <= q; i ++) { cin >> ask[i].type; if (ask[i].type == 1) cin >> ask[i].ver >> ask[i].d >> ask[i].w; else cin >> ask[i].ver; ask[i].t = i; } } int par[maxn], depth[maxn]; vector < int > by_depth[maxn]; int tin[maxn], tout[maxn], timer; void dfs(int v) { tin[v] = ++ timer; ///cout << "dfs " << v << " " << depth[v] << endl; by_depth[depth[v]].push_back(v); for (int u : adj[v]) { if (u == par[v]) continue; par[u] = v; depth[u] = depth[v] + 1; dfs(u); } tout[v] = timer; } const int maxd = 40; void update_row(int row, int lf, int rf, ll val) { for (int cur : by_depth[row]) { ///cout << "vertex " << cur << endl; if (tin[cur] >= lf && tin[cur] <= rf) h[cur] = (h[cur] * val) % l; } } void simulate() { for (int i = 1; i <= q; i ++) { if (ask[i].type == 2) cout << h[ask[i].ver] << endl; else { int cnt = 0, ver = ask[i].ver; while(ver != 1 && cnt <= ask[i].d) { int lf = ask[i].d - cnt; update_row(depth[ver] + lf, tin[ver], tout[ver], ask[i].w); ///cout << "update " << ver << " " << depth[ver] + lf << endl; //if (lf != 0) update_row(depth[ver] + lf - 1, tin[ver], tout[ver], ask[i].w); cnt ++; ver = par[ver]; } if (ver == 1 && cnt <= ask[i].d) { int lf = ask[i].d - cnt; for (int j = 0; j <= lf; j ++) { ///cout << "update " << ver << " " << depth[ver] + j << endl; update_row(depth[ver] + j, tin[ver], tout[ver], ask[i].w); } } /**for (int i = 1; i <= n; i ++) cout << h[i] << " "; cout << endl;*/ } } } void solve() { input(); ///offline_queries(); depth[1] = 1; dfs(1); simulate(); } int main() { speed(); solve(); 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...