Submission #1184122

#TimeUsernameProblemLanguageResultExecution timeMemory
1184122browntoadSprinkler (JOI22_sprinkler)C++20
100 / 100
445 ms56088 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast", "unroll-loops") using namespace std; #define ll long long // #define int ll #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define REP1(i, n) FOR(i, 1, n+1) #define RREP(i, n) for (int i = (n)-1; i >= 0; i--) #define pii pair<int, int> #define f first #define s second #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) #define pb push_back #define endl '\n' #define IOS() ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) const ll maxn = 2e5+45; const int mxdis = 40; int n, mod, q; int phi; vector<int> g[maxn]; vector<int> H(maxn), par(maxn); ll pw(ll a, ll p){ ll ret = 1; while(p > 0){ if (p & 1){ ret *= a; ret %= mod; } a *= a; a %= mod; p >>= 1; } return ret; } ll inv(ll a){ return pw(a, phi-1); } void dfs(int u, int pre){ par[u] = pre; for (auto v:g[u]){ if (v == pre) continue; dfs(v, u); } } int dp[maxn][mxdis+5]; // enumerate lca of path, if dis(a, b) <= D_a, then some point higher = D_a or D_a-1 void modify(int U, int D, int W){ REP(i, D+1){ dp[U][D-i] = ((ll)(dp[U][D-i]) * W)%mod; if (D-i-1 >= 0) dp[U][D-i-1] = ((ll)(dp[U][D-i-1]) * W)%mod; U = par[U]; } } int query(int U){ ll A = H[U]; REP(i, mxdis+1){ A = (A * dp[U][i])%mod; U = par[U]; } return A; } signed main(){ IOS(); cin>>n>>mod; REP(i, n-1){ int u, v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } REP(i, maxn) REP(j, mxdis+5) dp[i][j] = 1; FOR(i, n+1, n+mxdis+1){ g[i-1].pb(i); g[i].pb(i-1); } int rt = n+mxdis; REP1(i, n) cin>>H[i]; dfs(rt, -1); cin>>q; REP(i, q){ int t; cin>>t; if (t == 1){ int a, b, c; cin>>a>>b>>c; modify(a, b, c); } else{ int x; cin>>x; cout<<query(x)<<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...