제출 #1123268

#제출 시각아이디문제언어결과실행 시간메모리
1123268Mousa_Aboubaker트리 (IOI24_tree)C++20
0 / 100
2094 ms20896 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;

int n;
vector<vector<int>> adj;
vector<int> p, w;

void init(vector<int> P, vector<int> W) 
{
	p = P, w = W;
	n = (int)p.size();
	adj.resize(n);
	for(int i = 1; i < n; i++)
		adj[p[i]].push_back(i);
}

long long query(int L, int R)
{
	int l = L, r = R;
	vector<long long> all(n, 0);
	auto dfs = [&](auto self, int u) -> void
	{
		if((int)adj[u].size() == 0)
		{
			all[u] = l;
			return;
		}
		long long curr = 0;
		for(auto i: adj[u])
		{
			self(self, i);
			curr += all[i];
		}
		all[u] = min(0ll, r - curr);
	};
	dfs(dfs, 0);
	long long res = 0;
	for(int i = 0; i < n; i++)
		res += w[i] * 1ll * abs(all[i]);
	return res;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...