Submission #993060

#TimeUsernameProblemLanguageResultExecution timeMemory
993060abczzSprinkler (JOI22_sprinkler)C++14
100 / 100
563 ms95828 KiB
#include <iostream> #include <vector> #include <queue> #include <array> #define ll long long using namespace std; vector <ll> adj[200000]; bool up; ll n, M, q, t, a, b, c, p, f, H[200000], P[200000], par[200000][41]; void dfs(ll u, ll p) { for (auto v : adj[u]) { if (p != v) { P[v] = u; dfs(v, u); } } } int main() { cin.tie(0); ios::sync_with_stdio(0); cin >> n >> M; for (int i=0; i<n-1; ++i) { cin >> a >> b; --a, --b; adj[a].push_back(b); adj[b].push_back(a); } for (int i=0; i<n; ++i) { cin >> H[i]; for (int j=0; j<=40; ++j) par[i][j] = 1; } dfs(0, -1); P[0] = -1; cin >> q; while (q--) { cin >> t; if (t == 1) { cin >> a >> b >> c; --a; up = 0; for (int i=b; i>=0; --i) { par[a][i] *= c; par[a][i] %= M; up ^= 1; if (!up) { if (P[a] != -1) { a = P[a]; ++i; up = 0; } } } } else { cin >> a; --a; f = H[a]; for (int i=0; i<=40; ++i) { f *= par[a][i]; f %= M; a = P[a]; if (a == -1) break; } cout << f << '\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...