Submission #1140830

#TimeUsernameProblemLanguageResultExecution timeMemory
1140830KK_1729Sprinkler (JOI22_sprinkler)C++17
100 / 100
798 ms94276 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define pb push_back #define all(a) a.begin(), a.end() #define endl "\n" void printVector(vector<int> a){ for (auto x: a) cout << x << " "; cout << endl; } void solve(){ int n, l; cin >> n >> l; vector<vector<int>> graph(n+1); FOR(i,0,n-1){ int a, b; cin >> a >> b; graph[a].pb(b); graph[b].pb(a); } vector<int> par(n+50); par[1] = n+1; FOR(i,1,42){ par[n+i] = n+i+1; } stack<int> s; // vector<int> dep(n+50); s.push(1); vector<int> visited(n+50); while (!s.empty()){ int current = s.top(); s.pop(); if (visited[current]) continue; for (auto x: graph[current]){ if (visited[x]) continue; par[x] = current; // dep[x] = dep[current]+1; s.push(x); } visited[current] = 1; } vector<int> h(n+50); FOR(i,1,n+1) cin >> h[i]; vector<vector<int>> a(n+50, vector<int>(42, 1)); int q; cin >> q; FOR(e,0,q){ int t; cin >> t; if (t == 1){ int x, d, w; cin >> x >> d >> w; int height = 0; while (height <= d){ a[x][d-height] *= w; a[x][d-height] %= l; if (d-height){ a[x][d-height-1] *= w; a[x][d-height-1] %= l; } x = par[x]; height++; } }else{ int x; cin >> x; int height = 0; int curr = h[x]; while (height <= 41){ curr *= a[x][height]; curr %= l; x = par[x]; height++; } cout << curr << endl; } // cout << e << " a " << a[1][0] << endl; } } int32_t main(){ ios::sync_with_stdio(false);cin.tie(nullptr); 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...