Submission #799571

#TimeUsernameProblemLanguageResultExecution timeMemory
799571eltu0815Sprinkler (JOI22_sprinkler)C++14
100 / 100
807 ms165328 KiB
#include <bits/stdc++.h> #define MAX 500005 #define MOD (ll)(1e9+7) #define INF (ll)(1e18) using namespace std; typedef long long ll; typedef pair<ll, ll> pll; ll n, m, k, q, l, tt; ll arr[MAX], par[MAX][41], dp[MAX][41]; vector<ll> graph[MAX]; void dfs(ll node, ll p) { par[node][1] = p; for(auto v : graph[node]) if(v != p) dfs(v, node); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> l; for(ll i = 1; i <= n - 1; ++i) { ll a, b; cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } for(ll i = 1; i <= n; ++i) cin >> arr[i]; for(ll i = 0; i <= n; ++i) for(ll k = 0; k <= 40; ++k) dp[i][k] = 1; for(ll i = 0; i <= n; ++i) par[i][0] = i; dfs(1, 0); for(ll k = 2; k <= 40; ++k) for(ll i = 1; i <= n; ++i) par[i][k] = par[par[i][k - 1]][1]; cin >> q; for(ll i = 1; i <= q; ++i) { ll t; cin >> t; if(t == 1) { ll x, d, w; cin >> x >> d >> w; for(ll i = 0; i <= d; ++i) { dp[par[x][i]][d - i] = dp[par[x][i]][d - i] * w % l; if(par[x][i] == 0) break; } } else { ll x; cin >> x; ll ans = arr[x]; for(ll j = 0; j <= 40; ++j) { if(par[x][j] == 0) { for(ll k = j; k <= 40; ++k) ans = ans * dp[par[x][j]][k] % l; break; } ans = ans * dp[par[x][j]][j] % l; if(j < 40) ans = ans * dp[par[x][j]][j + 1] % l; } cout << ans << '\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...