제출 #952799

#제출 시각아이디문제언어결과실행 시간메모리
952799vladiliusSprinkler (JOI22_sprinkler)C++17
100 / 100
1112 ms82024 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int sz = 45;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, L; cin>>n>>L;
    vector<int> g[n + 1];
    for (int i = 1; i < n; i++){
        int a, b; cin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    vector<int> h(n + 1);
    for (int i = 1; i <= n; i++){
        cin>>h[i];
    }
    
    vector<int> p(n + 1);
    function<void(int, int)> dfs = [&](int v, int pr){
        p[v] = pr;
        for (int i: g[v]){
            if (i == pr) continue;
            dfs(i, v);
        }
    };
    dfs(1, 0);
    
    vector<vector<int>> T(n + 1, vector<int>(sz, 1));
    
    int q; cin>>q;
    while (q--){
        int type, x; cin>>type>>x;
        if (type == 1){
            int d, w; cin>>d>>w;
            while (x > 1 && d >= 0){
                T[x][d] = (1LL * T[x][d] * w) % L;
                if (d) T[x][d - 1] = (1LL * T[x][d - 1] * w) % L;
                x = p[x];
                d--;
            }
            for (int i = 0; i <= d; i++){
                T[x][i] = (1LL * T[x][i] * w) % L;
            }
        }
        else {
            int out = h[x];
            for (int i = 0; i < sz; i++){
                out = (1LL * out * T[x][i]) % L;
                x = p[x];
            }
            cout<<out<<"\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...