Submission #1274374

#TimeUsernameProblemLanguageResultExecution timeMemory
1274374warrennSprinkler (JOI22_sprinkler)C++20
0 / 100
909 ms84412 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int maxn=2e5;
vector<int>adj[maxn+2];
int dp[maxn+2][42],par[42],h[maxn+2];
int n,mod;

int mul(int a,int b){
    return (a*b)%mod;
}

void dfs(int cur,int ort){
    par[cur]=ort;
    for(auto x : adj[cur]){
        if(x==ort)continue;
        dfs(x,cur);
    }
}

signed main(){
    cin>>n>>mod;
    for(int q=1;q<=n;q++){
        for(int w=0;w<=41;w++){
            dp[q][w]=1;
        }
    }
    for(int q=1;q<n;q++){
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(1,-1);
    for(int q=1;q<=n;q++)cin>>h[q];

    int qu;
    cin>>qu;
    while(qu--){
        int ty;
        cin>>ty;
        if(ty==1){
            int x,d,w;
            cin>>x>>d>>w;
            while(x!=-1 && d>=0){
                dp[x][d]=mul(dp[x][d],w);
                d--;
                x=par[x];
            }
        }
        else{
            int x;
            cin>>x;
            int ans=h[x];
            for(int q=0;q<=40;q++){
                if(x==1){
                    for(int w=q;w<=40;w++){
                        ans=mul(ans,dp[1][w]);
                    }
                    break;
                }
                else{
                    ans=mul(ans,dp[x][q]);
                    ans=mul(ans,dp[x][q+1]);
                    x=par[x];
                }
            }
            cout<<ans<<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...