제출 #1362050

#제출 시각아이디문제언어결과실행 시간메모리
1362050Jawad_Akbar_JJSprinkler (JOI22_sprinkler)C++20
100 / 100
520 ms66948 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 1<<18;
vector<int> nei[N], Op[N];
int Par[N];

void dfs(int u, int p){
	Op[u].resize(42, 1);
	Par[u] = p;
	for (int i : nei[u]){
		if (i != p)
			dfs(i, u);
	}
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, L, q;
	cin>>n>>L;

	for (int i=1;i<n;i++){
		int a, b;
		cin>>a>>b;

		nei[a].push_back(b);
		nei[b].push_back(a);
	}

	dfs(1, 0);

	for (int i=1;i<=n;i++)
		cin>>Op[i][0];

	cin>>q;
	for (int i=1;i<=q;i++){
		int t, v, d = 0, w, Ans = 1;
		cin>>t>>v;
		
		if (t == 1){
			cin>>d>>w;

			while (d + 1 and v){
				Op[v][d] = 1LL * Op[v][d] * w % L;
				d--, v = Par[v];
			}
		}
		else{
			while (v > 1 and d <= 40){
				Ans = 1LL * Ans * Op[v][d] % L * Op[v][d+1] % L;
				v = Par[v], d++;
			}
			for (; d <= 40; d++)
				Ans = 1LL * Ans * Op[1][d] % L;

			cout<<Ans<<'\n';
		}
	}
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…