A. 梦境
标签:
贪心
题解:
考虑贪心:把区间按R升序排序,每次lower_bound取走第一个比L大的转折点,反证法可以证明它一定是对的
B. 玩具
标签:Dp
题解:
这是道Dp的好题,同时也是考场上拉开前几名分差的题。
设:
f[i][j]代表i个点组成的树深度不超过j的概率
g[i][j]代表i个点组成的森林深度不超过j的概率
h[i][j]代表i个点的森林中第一棵树有j个节点的概率
考虑转移:
h[i][j]=h[i-1][j-1]*(j-1)*inv[i]+h[i-1][j]*(i-j)*inv[i];
这里是i而不是i-1是因为i这个点可以单独成树,贡献被算到了h[i-1][j]的系数里
归纳证明一下h[i][j]=[j!=0]*inv[i]:
(1)h[0][j]=[j!=0]显然成立
(2)假设h[i-1][?]成立,带入上述递推式得:
1>j==1
h[i][j]=0*inv[i]+(i-1)*inv[i-1]*inv[i];
h[i][j]=inv[i];
2>j!=1
h[i][j]=(j-1+i-j)*inv[i]*inv[i-1];
h[i][j]=inv[i];
与原题设相符合,证毕。
f[i][j]=g[i-1][j-1](可以从实际意义考虑)
$ g[i][j]=sumlimits_{k=1}^{i}f[k][j]*g[i-k][j]*h[i][k] $
C. 飘雪圣域
标签:主席树
以后这种题还是尽量要去优化$ log^2 $,毕竟原来的NOIP是不开O2的
题解:
联通块数=点数-边数
考虑把每条边右端点看作位置,左端点看作权值,建出一棵主席树,
询问同理,直接在主席树上查询即可