| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 547314 | ToroTN | Sprinkler (JOI22_sprinkler) | C++14 | 1043 ms | 87360 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int n,l,u_i,v_i,h[200005],t,op,x,d,w,u,p[200005],arr[45],ed,kk,bruh;
int prime[200005],phi;
long long power[35],inv,cnt,dp[200005][45];
vector<int> v[200005],g;
queue<int> q;
int main()
{
    scanf("%d%d",&n,&l);
    bruh=l;
    phi=l;
    for(int i=2;i<=100000;i++)
    {
        prime[i]=1;
    }
    for(int i=2;i<=100000;i++)
    {
        if(prime[i]==1)
        {
            for(int j=2;i*j<=100000;j++)
            {
                prime[i*j]=0;
            }
        }
    }
    for(int i=2;i<=100000;i++)
    {
        if(prime[i]==1)
        {
            if(l%i==0)
            {
                phi/=i;
                phi*=(i-1);
                while(1)
                {
                    if(bruh%i==0)
                    {
                        bruh/=i;
                    }else
                    {
                        break;
                    }
                }
            }
        }
    }
    if(bruh!=1)
    {
        phi/=bruh;
        phi*=(bruh-1);
    }
    u=phi-1;
    for(int i=0;i<=30;i++)
    {
        g.push_back(u%2);
        u/=2;
    }
    for(int i=1;i<n;i++)
    {
        scanf("%d%d",&u_i,&v_i);
        v[u_i].push_back(v_i);
        v[v_i].push_back(u_i);
    }
    memset(p,-1,sizeof p);
    p[1]=0;
    q.push(1);
    while(!q.empty())
    {
        u=q.front();
        q.pop();
        for(int i=0;i<v[u].size();i++)
        {
            if(p[v[u][i]]==-1)
            {
                p[v[u][i]]=u;
                q.push(v[u][i]);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&h[i]);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=40;j++)
        {
            dp[i][j]=1;
        }
    }
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&op);
        if(op==1)
        {
            scanf("%d%d%d",&x,&d,&w);
            power[0]=w;
            for(int i=1;i<=30;i++)
            {
                power[i]=power[i-1]*power[i-1];
                power[i]%=l;
            }
            inv=1;
            for(int i=0;i<=30;i++)
            {
                if(g[i]==1)
                {
                    inv*=power[i];
                    inv%=l;
                }
            }
            u=x;
            for(int i=d;i>=0;i--)
            {
                arr[i]=u;
                ed=i;
                u=p[u];
                if(u==0)
                {
                    break;
                }
            }
            for(int i=d;i>=ed;i--)
            {
                /*dp[arr[i]][i]*=w;
                dp[arr[i]][i]%=l;
                if(i-1>=0&&i+1<=d)
                {
                    dp[arr[i+1]][i-1]*=inv;
                    dp[arr[i+1]][i-1]%=l;
                }*/
                if(i!=ed)
                {
                    dp[arr[i]][i]*=w;
                    dp[arr[i]][i]%=l;
                    dp[arr[i]][i-1]*=w;
                    dp[arr[i]][i-1]%=l;
                }else
                {
                    for(int j=0;j<=i;j++)
                    {
                        dp[arr[i]][j]*=w;
                        dp[arr[i]][j]%=l;
                    }
                }
            }
        }else
        {
            scanf("%d",&x);
            u=x;
            cnt=h[x];
            for(int i=0;i<=40;i++)
            {
                /*for(int j=i;j<=40;j++)
                {
                    cnt*=dp[u][j];
                    cnt%=l;
                }*/
                cnt*=dp[u][i];
                cnt%=l;
                u=p[u];
                if(u==0)
                {
                    break;
                }
            }
            printf("%lld\n",cnt);
        }
    }
}
/*
4 7
1 2
2 3
3 4
1
1
1
1
11
1 2 1 2
1 1 0 2
2 1
2 2
2 3
2 4
1 4 10 2
2 1
2 2
2 3
2 4
*/
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
