CF1606F.Tree Queries
省选/NOI-
通过率:0%
时间限制:6.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a tree consisting of n vertices. Recall that a tree is an undirected connected acyclic graph. The given tree is rooted at the vertex 1.
You have to process q queries. In each query, you are given a vertex of the tree v and an integer k.
To process a query, you may delete any vertices from the tree in any order, except for the root and the vertex v. When a vertex is deleted, its children become the children of its parent. You have to process a query in such a way that maximizes the value of c(v)−m⋅k (where c(v) is the resulting number of children of the vertex v, and m is the number of vertices you have deleted). Print the maximum possible value you can obtain.
The queries are independent: the changes you make to the tree while processing a query don't affect the tree in other queries.
给你一棵包含 n 个顶点的树。注意:树是一种无向、连通且无环的图。给定的树以顶点 1 为根。
你需要处理 q 个查询。在每个查询中,你将获得树中的一个顶点 v 和一个整数 k。
为了处理一个查询,你可以按任意顺序删除树中的任意顶点,但根节点(即顶点 1)和顶点 v 不得被删除。当一个顶点被删除时,它的所有子节点将直接成为其父节点的子节点。你需要以某种方式处理该查询,使得表达式 c(v)−m⋅k 的值最大化(其中 c(v) 表示操作后顶点 v 的子节点数量,m 表示你所删除的顶点总数)。请输出所能得到的最大可能值。
各个查询相互独立:你在处理某个查询时对树所作的修改,不会影响其他查询中树的初始状态。
输入格式
The first line contains one integer n (1≤n≤2⋅105) — the number of vertices in the tree.
Then n−1 lines follow, the i-th of them contains two integers xi and yi (1≤xi,yi≤n; xi=yi) — the endpoints of the i-th edge. These edges form a tree.
The next line contains one integer q (1≤q≤2⋅105) — the number of queries.
Then q lines follow, the j-th of them contains two integers vj and kj (1≤vj≤n; 0≤kj≤2⋅105) — the parameters of the j-th query.
第一行包含一个整数 n(1≤n≤2⋅105)——树中顶点的数量。
接下来 n−1 行,其中第 i 行包含两个整数 xi 和 yi(1≤xi,yi≤n;xi=yi)——第 i 条边的两个端点。这些边构成一棵树。
接下来一行包含一个整数 q(1≤q≤2⋅105)——查询的数量。
然后是 q 行,其中第 j 行包含两个整数 vj 和 kj(1≤vj≤n;0≤kj≤2⋅105)——第 j 个查询的参数。
输出格式
For each query, print one integer — the maximum value of c(v)−m⋅k you can achieve.
对于每个查询,输出一个整数——你能达到的 c(v)−m⋅k 的最大值。
输入输出样例
输入#1
8 6 7 3 2 8 3 5 7 7 4 7 1 7 3 6 1 0 1 2 1 3 7 1 5 0 7 200000
输出#1
5 2 1 4 0 4
说明/提示
The tree in the first example is shown in the following picture:

Answers to the queries are obtained as follows:
- v=1,k=0: you can delete vertices 7 and 3, so the vertex 1 has 5 children (vertices 2, 4, 5, 6, and 8), and the score is 5−2⋅0=5;
- v=1,k=2: you can delete the vertex 7, so the vertex 1 has 4 children (vertices 3, 4, 5, and 6), and the score is 4−1⋅2=2.
- v=1,k=3: you shouldn't delete any vertices, so the vertex 1 has only one child (vertex 7), and the score is 1−0⋅3=1;
- v=7,k=1: you can delete the vertex 3, so the vertex 7 has 5 children (vertices 2, 4, 5, 6, and 8), and the score is 5−1⋅1=4;
- v=5,k=0: no matter what you do, the vertex 5 will have no children, so the score is 0;
- v=7,k=200000: you shouldn't delete any vertices, so the vertex 7 has 4 children (vertices 3, 4, 5, and 6), and the score is 4−0⋅200000=4.
第一个示例中的树如下图所示:

各查询的答案计算方式如下:
- v=1,k=0:可删除顶点 7 和 3,此时顶点 1 拥有 5 个子节点(顶点 2、4、5、6 和 8),得分为 5−2⋅0=5;
- v=1,k=2:可删除顶点 7,此时顶点 1 拥有 4 个子节点(顶点 3、4、5 和 6),得分为 4−1⋅2=2;
- v=1,k=3:不应删除任何顶点,此时顶点 1 仅有一个子节点(顶点 7),得分为 1−0⋅3=1;
- v=7,k=1:可删除顶点 3,此时顶点 7 拥有 5 个子节点(顶点 2、4、5、6 和 8),得分为 5−1⋅1=4;
- v=5,k=0:无论采取何种操作,顶点 5 均无子节点,因此得分为 0;
- v=7,k=200000:不应删除任何顶点,此时顶点 7 拥有 4 个子节点(顶点 3、4、5 和 6),得分为 4−0⋅200000=4。
输入解题思路,AI测评打分。不知道怎么写?