20250625 模拟赛 总结

BSGS板子
T2
youwike 有一棵 nn 个节点的树,每棵树上的每条边都有一个正整数边权,范围是 [1,m][1,m]。
这棵树的每个点 xx 有一个限制 wxwx,要求 xx 相连的所有边的边权的中位数不超过 wxwx。
中位数定义:设共有 kk 个数,则中位数为其从小到大排序后第 ⌊k2⌋+1⌊2k⌋+1 个。
youwikeyouwike 瞬间就找到了所有符合条件的树。现在他想问你,哪一棵符合条件的树的边权和最大。为了简化输出,你只需要输出边权和的最大值即可,不需要构造方案。
如果没有符合条件的树,请输出 -114514。
输入格式
第一行两个正整数 n,mn,m,分别表示节点的个数和边权的最大值。
第二行 nn 个正整数,第 ii 个数为 wiwi。
第 3∼n+13∼n+1 行,每行两个正整数 u,vu,v,表示树上有一条连接节点 uu 和 vv 的边。
输出格式
一行一个整数,表示答案。
样例 11
inputinput
7 100
50 25 25 12 12 12 12
1 2
1 3
2 4
2 5
3 6
3 7
outputoutput
148
考虑树形DP
我们设一条边(有向)如果边权大于中位数就是“大边”
否则是“小边”
我们设dp[u][0/1]为
父亲连向当前节点的边为小边/大边
考虑转移,有4种情况。
父->儿子 儿子<-父亲
大 大
大 小
小 大
小 小
全部都分讨取到最大值。
然后分为nofa(父亲连向儿子的排序好的贡献)和fa(反之)
我们就可以贪心取前k/k-1个来转移了。
T3
youwikeyouwike 有一个长度为 nn 的序列 ww。
由于他非常喜欢 gcdgcd,所以他认为一个序列的价值为这个序列中所有元素的 gcdgcd。
现在,他想知道,原序列 ww 的长度不小于 ⌈n2⌉⌈2n⌉ 的子序列中,价值最大的那个子序列的价值是多少。
输入格式
第一行一个正整数 nn。
第二行 nn 个正整数,表示序列 ww。
输出格式
一行一个整数,表示答案。
样例 11
inputinput
6
1 2 3 4 5 6
outpuutoutpuut
2
由于问题可以转化为,找到一个数x,使得他是超过半数元素的因子,并且要最大化x。
也就是说,有半数元素都包含答案作为因子
也就是说,一个树包含答案因子的概率是1/2,
所以随机选数,因数分解,然后判断,复杂度n sqrt n,一次失败概率是1/2,两次就是1/4......
多做几次就可以了。
浙公网安备 33010602011771号