2019.10.15题解 A. 梦境 B. 玩具 C. 飘雪圣域

标签:

贪心

题解:

考虑贪心:把区间按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的

题解:

联通块数=点数-边数

考虑把每条边右端点看作位置,左端点看作权值,建出一棵主席树,

询问同理,直接在主席树上查询即可