Submission #1267003

#TimeUsernameProblemLanguageResultExecution timeMemory
1267003hahahoang132Sprinkler (JOI22_sprinkler)C++20
100 / 100
652 ms89720 KiB
//#pragma GCC optimize("O2")
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
const ll N = 3e5 + 5;
const ll inf = LLONG_MAX/5;
#define bit(x,y) ((x >> y) & 1LL)

ll n,mod;
ll mul[50][N],h[N],p[N];
vector<ll> a[N];
void build(ll x, ll px)
{
    for(auto y : a[x])
    {
        if(y == px) continue;
        p[y] = x;
        build(y,x);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> mod;
    ll i,j;
    for(i = 1;i < n;i++)
    {
        ll u,v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }

    for(i = n + 40;i >= n + 2;i--)
    {
        a[i].push_back(i - 1);
        a[i - 1].push_back(i);
    }
    a[n + 1].push_back(1);
    a[1].push_back(n + 1);
    build(n + 40,0);
    for(i = 1;i <= n;i++) cin >> h[i];
    for(i = 0;i <= 40;i++)
    {
        for(j = 1;j <= n + 40;j++) mul[i][j] = 1;
    }
    ll q;
    cin >> q;
    for(i = 1;i <= q;i++)
    {
        ll qr;
        cin >> qr;
        if(qr == 1)
        {
            ll x,d,w;
            cin >> x >> d >> w;
            ll i,j;
            while(x != 0 && d >= 0)
            {
                mul[d][x] *= w;
                mul[d][x] %= mod;
                d--;
                if(d >= 0)
                {
                    mul[d][x] *= w;
                    mul[d][x] %= mod;
                }
                x = p[x];
            }
        }else
        {
            ll x;
            cin >> x;
            ll ans = h[x];
            ll d = 0;
            while(x != 0 && d <= 40)
            {
                ans *= mul[d][x];
                ans %= mod;
                x = p[x];
                d++;
            }
            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...