开始: 2025-08-26 00:00:00

暑期训练赛S03

结束: 2025-09-06 00:00:00
当前  2025-09-13 19:26:21  类型: IOI  状态: 已经结束 

P4. 虚树
描述

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

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。第二行两个整数 opn,表示是否强制在线和树的大小。接下来 n-1 行,每行三个正整数 u_iv_iw_i,表示 u_iv_i 之间有一条边权为 w_i 的边。接下来一行 n 个数,表示排列 p

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


输出

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

样例

输入

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 \leqQ \leqk \leqop特殊条件
6100010000100--
720000010000100--
820000010000100--
11200000100001000-
12200000100001001-
132000001000010001 的度数为 n - 1
142000001000010011 的度数为 n - 1
15 − 16200000100001000l = 1r = n
17 − 18200000100001000r - l + 1 \leq 100
19200000100001000-
20200000100001001-


提交

题目参数
时间限制 10 秒
内存限制 256 MB
提交