Submission #1261475

#TimeUsernameProblemLanguageResultExecution timeMemory
1261475chikien2009Sprinkler (JOI22_sprinkler)C++20
100 / 100
712 ms89776 KiB
#include <bits/stdc++.h>

using namespace std;

void setup()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

int n, l, a, b, c, par[200000];
vector<int> g[200000];
long long v[200000][41], res;

inline void DFS(int node)
{
    for (auto & i : g[node])
    {
        if (i != par[node])
        {
            par[i] = node;
            DFS(i);
        }
    }
}

int main()
{
    setup();

    cin >> n >> l;
    for (int i = 0; i < n - 1; ++i)
    {
        cin >> a >> b;
        g[a - 1].push_back(b - 1);
        g[b - 1].push_back(a - 1);
    }
    for (int i = 0; i < n; ++i)
    {
        fill_n(v[i], 41, 1);
        cin >> v[i][0];
    }
    par[0] = -1;
    DFS(0);
    cin >> n;
    while (n--)
    {
        cin >> a;
        if (a == 1)
        {
            cin >> a >> b >> c;
            a--;
            while (0 <= b)
            {
                (v[a][b] *= c) %= l;
                if (--b < 0)
                {
                    break;
                }
                (v[a][b] *= c) %= l;
                if (a != 0)
                {
                    a = par[a];
                }
                else
                {
                    b--;
                }
            }
        }
        else
        {
            cin >> a;
            res = 1;
            a--;
            b = 0;
            while (a != -1 && b <= 40)
            {
                (res *= v[a][b]) %= l;
                a = par[a];
                b++;
            }
            cout << res << "\n";
        }   
    }
    return 0;
}
#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...