题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的致命小细节是dfs1里面那个sum要定义成double的!…… #include<iostream> #include<cstdio> #include<cstring> #define db double using namespace std; ; int n,m,he…
[题意]给定n盏灯的01状态,操作第 i 盏灯会将所有编号为 i 的约数的灯取反.每次随机操作一盏灯直至当前状态能够在k步内全灭为止(然后直接灭),求期望步数.n,k<=10^5. [算法]期望DP [题解]对于当前状态,编号最大的亮灯必须通过操作自身灭掉. 证明:假设通过操作编号更大的灯灭掉,那么编号更大的灯只能通过操作自己灭掉,则与原来状态无区别,得证. 运用这个结论,每次灭掉最大编号的灯后的局面中,编号最大的灯一定严格小于原最大灯,所以至多需要n次操作. 从大到小,处理出m盏待操作灯,这样…