제출 #1162727

#제출 시각아이디문제언어결과실행 시간메모리
1162727quannnguyen2009Sprinkler (JOI22_sprinkler)C++20
100 / 100
694 ms87132 KiB
#include<bits/stdc++.h> #define int long long #define fi first #define se second #define pb push_back #define ii pair<int, int> #define sz(v) (int)v.size() #define all(v) v.begin(), v.end() using namespace std; const int N=2e5+5, inf = 1e18; int n, q, mod; int pro[N][41], h[N], par[N]; vector<int> adj[N]; void dfs(int u, int p) { par[u] = p; for (int v: adj[u]) { if(v!=p) dfs(v, u); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> mod; for (int i=1; i<n; i++) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } for (int i=1; i<=n; i++) { cin >> h[i]; for (int j=0; j<=40; j++) pro[i][j] = 1; } dfs(1, 0); cin >> q; while(q--) { int t; cin >> t; if(t==1) { int x, d, w; cin >> x >> d >> w; while (d>=0 && x>0) { if(x==1) { for (int i=d; i>=0; i--) pro[x][i] = pro[x][i]*w%mod; } else { pro[x][d] = pro[x][d]*w%mod; if(d>0) pro[x][d-1] = pro[x][d-1]*w%mod; } x = par[x]; d--; } } else { int x; cin >> x; int ans = h[x]; for (int i=0, u=x; i<=40 && u>0; i++, u = par[u]) ans = ans*pro[u][i]%mod; 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...