답안 #544677

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
544677 2022-04-02T14:21:03 Z blue Copy and Paste 3 (JOI22_copypaste3) C++17
0 / 100
194 ms 159180 KB
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;

using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define sz(x) int(x.size())

const int mx = 200'000;
const int lg = 19;

const int maxD = 40;

int N;
ll L;
vll H(1+mx);

vi edge[1+mx];

vi depth(1+mx, 1);
vi par(1+mx, 1);

ll mul(ll a, ll b)
{
	return (a*b)%L;
}

void dfs(int u, int p)
{
	par[u] = p;
	for(int v : edge[u])
	{
		if(v == p) continue;
		depth[v] = depth[u] + 1;
		dfs(v, u);
	}
}

vvll prop(1+mx, vll(1+maxD, 1)); //propagate this value in prop[u][d] at depth = depth[u]+d




int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> N >> L;

	for(int e = 1; e <= N-1; e++)
	{
		int a, b;
		cin >> a >> b;
		edge[a].push_back(b);
		edge[b].push_back(a);
	}

	for(int i = 1; i <= N; i++) cin >> H[i];

	dfs(1, 0);

	
	int Q;
	cin >> Q;

	for(int q = 1; q <= Q; q++)
	{
		int t;
		cin >> t;

		if(t == 1)
		{
			int x, d;
			ll w;
			cin >> x >> d >> w;

			int y = x;

			for(int z = 0; z <= d; z++) //assign every level to the HIGHEST ancestor that can handle it.
			{
				if(y == 0) break;

				if(z >= 1)
					y = par[y];

				int dlo = depth[y];

				int dhi = depth[y] + (d - (depth[x] - depth[y]));

				if(z < d && y != 1)
					dlo = max(dlo, (depth[y]-1) + d - (depth[x] - (depth[y]-1)) + 1);

				dlo -= depth[y];
				dhi -= depth[y];

				for(int v = dlo; v <= dhi; v++)
					prop[y][v] = mul(prop[y][v], w);
			}
		}
		else
		{
			int x;
			cin >> x;
			ll res = H[x];
			for(int y = x; y != 0 && depth[x] - depth[y] <= 40; y = par[y])
				res = mul(res, prop[y][depth[x] - depth[y]]);

			cout << res << '\n';
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 194 ms 159100 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 174 ms 159180 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 194 ms 159100 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 194 ms 159100 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 194 ms 159100 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 194 ms 159100 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -