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。

由于他非常喜欢 gcd⁡gcd,所以他认为一个序列的价值为这个序列中所有元素的 gcd⁡gcd。

现在,他想知道,原序列 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......

多做几次就可以了。
posted @ 2025-06-26 09:00  Dreamers_Seve  阅读(13)  评论(0)    收藏  举报