제출 #637991

#제출 시각아이디문제언어결과실행 시간메모리
637991LittleCubeSprinkler (JOI22_sprinkler)C++14
100 / 100
790 ms95304 KiB
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define F first
#define S second
using namespace std;

ll N, Q, L, pre[200050], h[200055], mul[200055][41];
vector<int> E[200050];

void dfs(int u)
{
	for(int v : E[u])
		if(pre[u] != v)
		{
			pre[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 - 1; i++)
	{
		int u, v;
		cin >> u >> v;
		E[u].emplace_back(v);
		E[v].emplace_back(u);
	}
	for(int i = 1; i <= 40; i++)
		E[N + i].emplace_back(N + i - 1);
	dfs(N + 40);
	for(int i = 1; i <= N; i++)
		cin >> h[i];
	for(int i = 1; i <= N + 40; i++)
		for(int j = 0; j <= 40; j++)
			mul[i][j] = 1;
	cin >> Q;
	while(Q--)
	{
		ll T, X, D, W;
		cin >> T;
		if(T == 1)
		{
			cin >> X >> D >> W;
			for(int i = D; i >= 0; i--)
			{
				mul[X][i] = mul[X][i] * W % L;
				if(i)
					mul[X][i - 1] = mul[X][i - 1] * W % L;
				X = pre[X];
			}
		}
		else
		{
			cin >> X;
			ll ans = h[X];
			for(int i = 0; i <= 40; i++)
			{
				ans = ans * mul[X][i] % L;
				X = pre[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...