Submission #1208004

#TimeUsernameProblemLanguageResultExecution timeMemory
1208004HanksburgerSprinkler (JOI22_sprinkler)C++20
100 / 100
664 ms91704 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[200005][45], par[200005], n, l, q;
vector<int> adj[200005];
void dfs(int u)
{
    for (int v:adj[u])
    {
        if (v==par[u])
            continue;
        par[v]=u;
        dfs(v);
    }
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> l;
    for (int i=1; i<n; i++)
    {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    for (int i=1; i<=n; i++)
        cin >> a[i][0];
    for (int i=1; i<=40; i++)
        for (int j=1; j<=n; j++)
            a[j][i]=1;
    dfs(1);
    cin >> q;
    while (q--)
    {
        int t;
        cin >> t;
        if (t==1)
        {
            int x, d, w;
            cin >> x >> d >> w;
            for (int j=d; j>=0; j--)
            {
                a[x][j]=a[x][j]*w%l;
                a[x][j-1]=a[x][j-1]*w%l;
                if (x==1)
                {
                    for (int k=j-2; k>=0; k--)
                        a[x][k]=a[x][k]*w%l;
                    break;
                }
                x=par[x];
            }
        }
        else
        {
            int x, ans=1;
            cin >> x;
            for (int j=0; j<=40; j++)
            {
                ans=ans*a[x][j]%l;
                if (x==1)
                    break;
                x=par[x];
            }
            cout << ans << '\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...