题目名称 | 1834. [国家集训队2011]采矿 |
---|---|
输入输出 | mine.in/out |
难度等级 | ★★★★ |
时间限制 | 2000 ms (2 s) |
内存限制 | 256 MiB |
测试数据 | 20 |
题目来源 | cstdio 于2014-12-02加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:16, 提交:55, 通过率:29.09% | ||||
_Horizon | 100 | 1.340 s | 36.24 MiB | C++ |
<蒟蒻>我要喝豆奶 | 100 | 1.399 s | 24.52 MiB | C++ |
cstdio | 100 | 1.404 s | 25.81 MiB | C++ |
荡漾 | 100 | 1.449 s | 122.00 MiB | C++ |
Cydiater | 100 | 1.480 s | 38.85 MiB | C++ |
炎帝 | 100 | 1.577 s | 25.81 MiB | C++ |
hsez_jxr | 100 | 1.896 s | 24.41 MiB | C++ |
frontier | 100 | 1.999 s | 39.61 MiB | C++ |
hsez_jxr | 100 | 2.002 s | 24.05 MiB | C++ |
hsez_jxr | 100 | 2.032 s | 24.41 MiB | C++ |
关于 采矿 的近10条评论(全部评论) | ||||
---|---|---|---|---|
为什么人类要互相伤害
| ||||
回复 @cstdio :
强烈呼吁萌帝把这题难度改为8星!!!
Asm.Def
2014-12-03 16:14
2楼
| ||||
树链剖分维护“一段路径/DFS序列内的背包和”……
|
浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略。
这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n的整数编号。为了方便起见,对于任何一个非根节点v,它任何一个祖先的编号都严格小于v。树上的每个节点表示一个矿点,每条边表示一条街道。
作为cg大军的一个小队长,你拥有m个部下。你有一张二维的动态信息表,用Ti,j表示第i行第j列的数据。当你被允许开采某个区域时,你可以将你的部下分配至各个矿点。在第i个矿点安排j个人可以获得Ti,j单位的矿产。
允许开采的区域是这样描述的:给你一对矿点(u,v),保证v是u的祖先(这里定义祖先包括u本身);u为你控制的区域,可以在以u为根的子树上任意分配部下;u到v的简单路径(不包括u但包括v,若u=v则包括u)为探险路径,在该路径上你可以选择至多一个矿点安排部下。你这次开采的收益为安排有部下的矿点的收益之和。
输入的第一行包含5个正整数n、m、A、B、Q。n为矿点的个数,m为部下的数量。A、B、Q是与动态信息表有关的数据。
第二行包含n-1个正整数,第i个数为Fi+1,表示节点i+1的父亲。
接下来需要你用下文的方法依次生成n组数据,每组数据共m个。其中第i组的m个数据为信息表中第i行的m个数据。
紧接着一行包含一个正整数C,表示事件的数量。
最后给出C行,每行描述一个事件。每个事件会先给出一个0或1的整数。如果该数为0,则后面有一个正整数p,表示动态信息表有更新,你需要生成一组m个数据,来替换信息表中第p行的m个数据。如果该数为1,则后面有两个正整数u、v,表示出现了一个你可以开采的区域,你需要回答这次开采的收益。
同一行的各个数之间均用一个空格隔开,没有多余的空格和换行。
数据的生成方法如下:
每次生成一组m个从小到大排列的数据,替换动态信息表的一行。其中,从小到大第j个数替换信息表中第j列的数。
调用以下代码m次并排序得到一组数据。(注意可能会出现重复的数)
函数GetInt A←((A xor B)+(B div X)+(B * X))and Y B←((A xor B)+(A div X)+(A * X))and Y 返回(A xor B)mod Q
其中A、B、Q均用32位有符号整数保存(C/C++的signed long int类型,pascal的longint类型),X = 2^16,Y = 2^31-1,xor为位异或运算,div为整除运算,and为位且运算,mod为取余运算。由于只保留了低31位,易得我们不用考虑数据的溢出问题。(注意每次A和B都会被改变)
对于每个开采事件(开头为1的事件),输出一行一个整数,为每次的收益。
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
最初的信息表如下
|
1 |
2 |
3 |
4 |
5 |
1 |
0 |
1 |
1 |
2 |
2 |
2 |
0 |
5 |
7 |
7 |
9 |
3 |
1 |
2 |
3 |
4 |
5 |
4 |
0 |
1 |
2 |
4 |
5 |
5 |
2 |
4 |
7 |
8 |
8 |
6 |
0 |
2 |
3 |
8 |
9 |
7 |
1 |
3 |
5 |
6 |
8 |
8 |
3 |
3 |
3 |
7 |
8 |
9 |
0 |
1 |
2 |
3 |
9 |
10 |
0 |
0 |
1 |
4 |
4 |
1 |
1 |
1 |
1 |
4 |
7 |
第一次开采可以在矿点6、8、9、10任意安排,可以在矿点3或4中选取一个安排开采。一种最优安排是在矿点6安排4人,在矿点8安排1人。第二次开采可以在矿点9安排,可以在矿点6、4、3、1中选择一个安排。一种最优安排是在矿点9安排1人,在矿点6安排4人。
有50%的数据,对于满足2 ≤ i ≤ n的整数i,Fi = i – 1;
这些数据中有40%的数据(即所有数据的20%)满足n ≤ 500,m ≤ 20,C ≤ 500;
除上述数据,另有40%的数据满足n ≤ 500,m ≤ 20,C ≤ 500。
对于100%的数据1 ≤ n ≤ 20000,1 ≤ m ≤ 50,1 ≤ C ≤ 2000。对于满足2 ≤ i ≤ n的整数i,1 ≤ Fi < i。1 ≤ A,B ≤ 231 - 1,1 ≤ Q ≤ 10000。
国家集训队2011 陈许旻