#P10599. BZOJ2164 采矿

    ID: 10039 Type: RemoteJudge 1000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>动态规划,dp线段树背包树链剖分

BZOJ2164 采矿

题目背景

题目来自原 BZOJ,我们承认题面及原数据的版权均属于原 BZOJ 或将题目授权给 BZOJ 使用的出题人。如果您是版权所有者且认为我们侵犯了您的权益,可联系我们。

题目描述

浩浩荡荡的 cg 大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略。

这个城市可以看成一棵有 nn 个节点的有根树,我们把每个节点用 11nn 的整数编号。为了方便起见,对于任何一个非根节点 vv,它任何一个祖先的编号都严格小于 vv。树上的每个节点表示一个矿点,每条边表示一条街道。

作为 cg 大军的一个小队长,你拥有 mm 个部下。你有一张二维的动态信息表,用 Ti,jT_{i,j} 表示第 ii 行第 jj 列的数据。当你被允许开采某个区域时,你可以将你的部下分配至各个矿点。在第 ii 个矿点安排 jj 个人可以获得 Ti,jT_{i,j} 单位的矿产。

允许开采的区域是这样描述的:给你一对矿点 (u,v)(u,v),保证 vvuu 的祖先(这里定义祖先包括 uu 本身);uu 为你控制的区域,可以在以 uu 为根的子树上任意分配部下;uuvv 的简单路径(不包括 uu 但包括 vv,若 u=vu=v 则包括 uu)为探险路径,在该路径上你可以选择至多一个矿点安排部下。你这次开采的收益为安排有部下的矿点的收益之和。

输入格式

输入的第一行包含 55 个正整数 n,m,A,B,Qn,m,A,B,Q。其中 nn 为矿点的个数,mm 为部下的数量。A,B,QA,B,Q 是与动态信息表有关的数据。

第二行包含 n1n-1 个正整数,第 ii 个数为 Fi+1F_{i+1},表示节点 i+1i+1 的父亲。

接下来需要你用下文的方法依次生成 nn 组数据,每组数据共 mm 个。其中第 ii 组的 mm 个数据为信息表中第 ii 行的 mm 个数据。紧接着一行包含一个正整数 CC,表示事件的数量。

最后给出 CC 行,每行描述一个事件。每个事件会先给出一个 0011 的整数。如果该数为 00,则后面有一个正整数 pp,表示动态信息表有更新,你需要生成一组 mm 个数据,来替换信息表中第 pp 行的 mm 个数据。如果该数为11,则后面有两个正整数 u,vu,v,表示出现了一个你可以开采的区域,你需要回答这次开采的收益。同一行的各个数之间均用一个空格隔开,没有多余的空格和换行。

数据的生成方法如下:每次生成一组 mm 个从小到大排列的数据,替换动态信息表的一行。其中,从小到大第 jj 个数替换信息表中第 jj 列的数。调用以下代码 mm 次并排序得到一组数据。(注意可能会出现重复的数)

Function GetInt 

A←((A xor B)+(B div X)+(B * X))and Y 
B←((A xor B)+(A div X)+(A * X))and Y 

return (A xor B)mod Q 

其中 A,B,QA,B,Q 均用 3232 位有符号整数保存(C/C++ 的 signed long int 类型,pascal 的 longint 类型),X=216X=2^{16}Y=2311Y=2^{31}-1,xor 为位异或运算,div 为整除运算,and 为位且运算,mod 为取余运算。由于只保留了低 3131 位,易得我们不用考虑数据的溢出问题。注意每次 AABB 都会被改变)

输出格式

对于每个开采事件(开头为 11 的事件),输出一行一个整数,为每次的收益。

10 5 1 2 10
1 1 3 3 4 4 6 6 9
4
1 6 3
1 9 1
0 1
1 1 1
11
9
12

提示

【样例解释】

最初的信息表如下:

0 1 2
0 5 7 9
1 2 3 4 5
0 1 2
2 4 7 8 8
0 2 3 9
1 3 5 6 8
3 3 7
0 1 2 3 9
0 1 4

变化后的第 11 行,为:

1 1 1 4 7

第一次开采可以在矿点 6,8,9,106,8,9,10 任意安排,可以在矿点 3344 中选取一个安排开采。一种最优安排是在矿点 66 安排 44人,在矿点 88 安排 11 人。第二次开采可以在矿点 99 安排,可以在矿点 6,4,3,16,4,3,1 中选择一个安排。一种最优安排是在矿点 99 安排 11 人,在矿点 66 安排 44 人。

【数据范围】

50%50\% 的数据,对于满足 2in2\leq i\leq n 的整数 iiFi=i1F_i=i-1。这些数据中有 40%40\% 的数据(即所有数据的 20%20\%)满足 n500m20C500n\leq 500,m\leq 20,C\leq 500

除上述数据,另有 40%40\% 的数据满足 n500n\leq 500m20m\leq 20C500C\leq 500

对于 100%100\% 的数据 1n200001\leq n\leq 200001m501\leq m\leq 501C20001\leq C\leq 2000。对于满足 2in2\leq i\leq n 的整数 ii1Fi<i1\leq F_i<i1A,B23111\leq A,B\leq 2^{31}-11Q100001\leq Q\leq 10000