Submission #1274534

#TimeUsernameProblemLanguageResultExecution timeMemory
1274534neisennSprinkler (JOI22_sprinkler)C++20
100 / 100
764 ms96640 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define eb emplace_back #define ppb pop_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, int> pli; typedef pair<int, ll> pil; typedef pair<ll, ll> pll; typedef tuple<ll, int, int> tii; const char nl = '\n'; const int mod = 998244353; const ll INF = 1e18; const int inf = 1e9; vector<vector<int>> adj; vector<int> par; void dfs(int cur, int p){ for (int ch : adj[cur]){ if (ch == p) continue; dfs(ch, cur); par[ch] = cur; } } void solve(){ int n, l; cin >> n >> l; adj.resize(n+1); par.resize(n+1, -1); for (int i = 1; i < n; i++){ int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } ll h[n+1]; for (int i = 1; i <= n; i++){ cin >> h[i]; } dfs(1, -1); int q; cin >> q; vector<vector<ll>> dp(n+1, vector<ll> (41, 1)); // dp[i][j] = update yang tersimpan di node i dari anak anaknya dengan jarak masih bisa jalan j while (q--){ int id; cin >> id; if (id == 1){ int x, d; ll k; cin >> x >> d >> k; int cur = x; for (int i = d; i >= 0; i--){ // cout << "UPDATE " << cur << ' ' << i << ' ' << k << nl; dp[cur][i] *= k; dp[cur][i] %= l; cur = par[cur]; if (cur == -1) break; } } else { int x; cin >> x; ll ans = h[x]; int cur = x; int st = 0; for (int i = 0; i <= 40; i++){ if (cur == 1){ for (int j = i; j <= 40; j++){ // if (dp[cur][j] > 1) cout << "ada " << cur << ' ' << j << ' ' << dp[cur][j] << nl; ans *= dp[cur][j]; ans %= l; } break; } // if (dp[cur][i] > 1) cout << "ada " << cur << ' ' << i << nl; // cout << dp[cur][i] << ' '; ans *= dp[cur][i]; ans %= l; if (i+1 <= 40){ ans *= dp[cur][i+1]; ans %= l; } cur = par[cur]; if (cur == -1) break; } cout << ans << nl; } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; while (t--){ solve(); } }
#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...