Submission #784293

#TimeUsernameProblemLanguageResultExecution timeMemory
784293TakeMeSprinkler (JOI22_sprinkler)C++14
9 / 100
694 ms101992 KiB
/* Quick Note :
 * Jangan Mikir Lama - lama, sampahin dulu aja kalo OI
 * Always Try to reset
*/
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define debug(val) cerr << "The value of " << #val << " is = " << val << '\n';
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
const ld PI = 4*atan((ld)1);
const ll mod = 1e9 + 7;
const ll inf = 922337203685477;
const ll nax = 2e5 + 5;

ll n, q, len;
ll a[nax], par[nax], val[nax];
ll child_mul[nax][45];
vector<ll> v[nax];

void find_par(ll x, ll y){
	par[x] = y;
	for(auto it : v[x]){
		if(it == y) continue;
		else{
			find_par(it, x);
		}
	}
}

void dfs_update(ll x, ll dis, ll w){
	if(dis < 0 || x == 0) return;
	val[x] *= w;
	val[x] %= len;
	dfs_update(par[x], dis - 1, w);
}

ll dfs_query(ll x, ll dis){
	if(dis >= 41 || x == 0) return 1;
	ll ret = child_mul[x][dis];
	//cout << child_mul[x][dis] << " " << x << " " << dis << '\n';
	return (ret * dfs_query(par[x], dis + 1)) % len;
}

int main(){ 
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    //freopen("test.in", "r", stdin);
    //freopen("test.out", "w", stdout);
    
    cin >> n >> len;
    for(ll i = 1; i <= n ; i++){
		for(ll j = 1; j <= 40; j++){
			child_mul[i][j] = 1;
		}
	}
    for(ll i = 1; i < n; i++){
		ll x, y;
		cin >> x >> y;
		v[x].pb(y);
		v[y].pb(x);
	}
	for(ll i = 1; i <= n; i++){
		cin >> val[i];
	}
	find_par(1, 0);
	cin >> q;
	while(q--){
		ll tp;
		cin >> tp;
		if(tp == 1){
			ll x, d, w;
			cin >> x >> d >> w;
			for(ll i = 1; i <= d; i++){
				child_mul[x][i] *= w;
				child_mul[x][i] %= len;
			}
			val[x] *= w;
			val[x] %= len;
			dfs_update(par[x], d - 1, w);
		}
		else{
			ll x;
			cin >> x;
			ll ans = val[x] * dfs_query(par[x], 1);
			
			cout << ans % len << '\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...