Submission #1123269

#TimeUsernameProblemLanguageResultExecution timeMemory
1123269Mousa_Aboubaker트리 (IOI24_tree)C++20
10 / 100
2096 ms23204 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);
	vector<long long> x(n, 0);
	auto dfs = [&](auto self, int u) -> void
	{
		if((int)adj[u].size() == 0)
		{
			all[u] = l;
			x[u] = l;
			return;
		}
		long long curr = 0;
		for(auto i: adj[u])
		{
			self(self, i);
			curr += x[i];
		}
		all[u] = min(0ll, r - curr);
		if(all[u] == 0)
			x[u] = curr;
		else
			x[u] = r;
	};
	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...