3786: 虚树(第一轮04)

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:5 解决:1

题目描述

有一棵 n  个节点, 边权是正整数的树, 和一个  1  ~  n   的排列  p 。 有Q次询问, 每次给出 l, r, k,你需要回答在 p  的区间[l, r]中选 k  个点,问这 k  个点构成的虚树的边权和最大是 多少。sample.zip

inline void decode(int &l, int &r, int &k, i64 lstans, int testop) { lstans %= 19260817;

if(testop) {

l ^= lstans; l = (l % n + n) % n + 1;  r ^= lstans; r = (r % n + n) % n + 1; if(l > r) std :: swap(l, r);

k ^= lstans;

k = (k % std :: min(r - l + 1, 100)) + 1; }

}

输入

第一行一个整数 id,表示测试点编号,样例编号为  0 。 第二行两个整数  op, n,表示是否 强制在线和树的大小。 接下来 n  −  1   行,每行三个正整数 ui  ,  vi  , wi,表示ui , vi    之间有 一条边权为 wi    的边。 接下来一行 n  个数,表示排列  p。

接下来一行一个整数 Q,表示询问个数。 接下来 Q  行,每行三个正整数 l, r, k,含义如题。 若 op  =  1,则当前测试点强制在线,每次的  l, r, k   需要调用下发的解码函数。

输出

输出包含若干行,对于每个询问输出一行一个正整数表示答案。

样例输入 复制

0
0 8
2 1 168841147
3 2 185715402
4 3 225620062
5 2 229186192
6 1 56387677
7 1 912381225
8 6 897978762
6 8 4 1 3 2 5 7
10
1 4 1
3 8 4
1 3 2
2 8 3
3 4 1
1 5 5
1 6 1
3 7 2
3 6 4
1 4 3

样例输出 复制

0
1721744028
1534543050
2446924275
0
1534543050
0
640521656
580176611
1534543050

提示

备注】

 

测试点编号

n

Q

k

op

特殊性质

1

8

10

8

0

2

8

10

8

1

3

100

100

100

0

 

4

100

100

100

1

 

5

1000

10000

100

0

 

6

1000

10000

100

1

 

7

200000

1000

100

0

 

8

200000

1000

100

1

 

9  10

200000

10000

2

0

 

11

200000

10000

100

0

树形态随机

12

200000

10000

100

1

树形态随机

 


 

13

200000

10000

100

0

1 的度数为 n - 1

14

200000

10000

100

1

1 的度数为 n - 1

15 - 16

200000

10000

100

0

l = 1, r = n

17 - 18

200000

10000

100

0

r - l + 1  100

19

200000

10000

100

0

 

20

200000

10000

100

1

 

 

来源/分类