Noip 模拟 7 2018/10/24

T1:梦境(dream)
智者奥尔曼曾说过:有缘的人即使相隔海角天涯,也会在梦境中相遇。
IcePrince_1968 和 IcePrincess_1968 便是如此。有一天 IcePrincess_1968 突发奇想:为什么不用梦境操控仪器来增加她和 IcePrince_1968 的缘分呢?
IcePrincess_1968 的梦境可以用 n 个区间来表示,第 i 个区间 [li,ri] 表示她的第 i 个梦境会 li 时刻开始,在 ri 时刻结束(包含 li 和 ri 两个时刻)。因为 IcePrincess_1968 经常做白日梦,所以 n 可能很大。
两个人的梦境不是什么时候都能融合的。只有在一些关键的与另一个人相关的梦境转折点两个人的梦境相遇,才能完成融合,形成浪漫的梦境。 IcePrincess_1968 探测到 IcePrince_1968 近期的 m 个与 IcePrincess_1968 相关的梦境转折点,第 i 个转折点 ti 表示他的第 i 个梦境转折点会在 ti 时刻出现。因为 IcePrince_1968 和 IcePrincess_1968 很有缘, IcePrince_1968 经常梦到 IcePrincess_1968,所以 m 可能会很大。当 IcePrincess_1968 的一个梦境包含了 IcePrince_1968 的一个梦境转折点时,两个人的这两段梦境就能得到融合。但要注意 IcePrincess_1968 的每段梦境只能和 IcePrince_1968 的一个梦境转折点融合,类似的,IcePrince_1968 的每个梦境转折点只能和 IcePrincess_1968 的一段梦境融合,否则会引发时空混乱。
IcePrincess_1968 很喜欢做和 IcePrince_1968 相关的梦。所以她想算出她的这些梦境最多能和 IcePrince_1968 的梦境转折点融合出多少个浪漫的梦境。IcePrincess_1968 擅长文学但不擅长计算机,所以只能找你帮忙。

考虑贪心,将梦境转折点按左端点从小到大排序,依次为每个梦境转折点安排梦境。
考虑当前所有还未被选中的,左端点在当前梦境转折点左边的区间,从中选右端点在当前梦境转折点右边且最靠左的区间与其匹配即可,如果没有则跳过。
考虑用优先队列优化上述的贪心过程。我们先将所有的梦境区间按照左端点从小到大排序,从小到达枚举梦境转折点的过程中,我们把当前左端点在转折点左边且还没有被加入优先队列的区间加进优先队列,优先队列是以右端点为关键字的小根堆。然后我们将右端点在当前转折点之前的区间直接扔掉,找到第一个在转折点右边的区间与当前转折点匹配即可。

T2:玩具(toy)
这个故事发生在很久以前,在 IcePrincess_1968 和 IcePrince_1968 都还在上幼儿园的时候。
IcePrince_1968 最近迷上了一种玩具,这种玩具中有两种零件:圆球和棍子。棍子的两头可以插在两个圆球上的各一个空洞中,从而将两个圆球连接起来。为了保证玩具的娱乐性,任意一个圆球上的空洞个数总是多于玩具套装中的棍子数。你可以认为圆球是没有体积的,所有棍子的长度均为 1。
IcePrince_1968 喜欢这样玩这种玩具:他先摸出玩具袋里的一个圆球放在地上,然后重复下面的操作 n-1 次:每次从袋中取出一个圆球和一根棍子,然后等概率的从地上的圆球中选择一个,将该圆球和选择的圆球用棍子连起来,使得新的圆球在选中圆球的正上方。
IcePrince_1968 对自己搭出的艺术品很满意,便决定把这个物品送给 IcePrincess_1968 作为生日礼物。然而生日礼物是需要包装的,因为默认圆球没有体积,所以 IcePrince_1968 不用考虑包装盒的长和宽,但是包装盒的高是需要确定的,这里我们假设 IcePrince_1968 是一个非常节俭的孩子,所以包装盒的高总是等于艺术品的高度。IcePrince_1968 想知道自己需要的包装盒的高的期望对质数 p 取模后的值,但他还在上幼儿园,怎么会算呢,于是就请你来帮助他。

难度显然是 T 3 T3 T3
预处理 d p [ i ] [ j ] dp[i][j] dp[i][j]表示 i i i 个点的森林,有 j j j 个点在第一棵树的概率,转移考虑第 i i i 个点是否在第一棵子树中,我们有状态转移方程 d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] ∗ ( j − 1 ) ∗ i n v [ i ] + d p [ i − 1 ] [ j ] ∗ ( i − j ) ∗ i n v [ i ] dp[i][j] = dp[i − 1][j − 1] ∗ (j − 1) ∗ inv[i] + dp[i − 1][j] ∗ (i − j) ∗ inv[i] dp[i][j]=dp[i1][j1](j1)inv[i]+dp[i1][j](ij)inv[i]
f [ i ] [ j ] f[i][j] f[i][j] 表示有$ i$ 个点的树,深度不超过 j j j 的概率, g [ i ] [ j ] g[i][j] g[i][j] 表示有$ i$ 个点的森林,深度不超过 j j j 的概率, f [ i ] [ j ] f[i][j] f[i][j] 直接从 g [ i − 1 ] [ j − 1 ] g[i-1][j-1] g[i1][j1] 转移来(将森林的所有根节点拉到一个新的节点上); g [ i ] [ j ] g[i][j] g[i][j] 考虑枚举第一棵树的大小 k k k,从一棵树和一个森林转移来,同时还要乘上第一棵子树大小为 k k k 的概率,我们有状态转移方程: g [ i ] [ j ] = ∑ k = 1 i f [ k ] [ j ] ∗ g [ i − k ] [ j ] ∗ d p [ i ] [ k ] g[i][j] = \sum_{k=1}^{i} f[k][j] ∗ g[i − k][j] ∗ dp[i][k] g[i][j]=k=1if[k][j]g[ik][j]dp[i][k]
最后只要 f [ n ] [ j ] − f [ n ] [ j − 1 ] f[n][j]-f[n][j-1] f[n][j]f[n][j1] 就可以得到深度为 j 的树的概率。
时间复杂度:O(n^3)

T3:飘雪圣域(icekingdom)
IcePrincess_1968 和 IcePrince_1968 长大了,他们开始协助国王 IceKing_1968 管理国内事物。
IcePrincess_1968 和 IcePrince_1968 住在一个宁静悠远的王国:IceKingdom —— 飘雪圣域。飘雪圣域有 n 个城镇,编号 1,2,3…n。有些城镇之间有道路,且满足任意两点之间有且仅有一条路径。飘雪圣域风景优美,但气候并不是太好。根据 IcePrince_1968 的气候探测仪,将来会发生 q 场暴风雪。每场暴风雪可以用两个整数 li,ri 刻画,表示这场暴风雪之后,只有编号属于 [li,ri] 的城市没有受到暴风雪的影响。
在暴风雪的影响下迅速确定王国的农业生产方案是非常重要的事情。IceKing_1968 认为,一个农业生产地域应该是一个极大连通块,满足每个节点都没有被暴风雪影响。这里极大连通块的定义是:不存在一个不属于该点集的未被暴风雪影响的点与该连通块连通。
IcePrincess_1968 要负责算出每次暴风雪后,王国能拥有多少个农业生产地域。注意这里每次暴风雪是独立的,即每次暴风雪过后,直到每个城镇重新焕发生机,下一次暴风雪才会到来。
正如上文所述,IcePrincess_1968 擅长文学但不擅长计算机,于是请你帮忙。

一个不会被影响的联通块当且仅当联通块内所有的边都不会被影响
那么就只要知道 [ l i , r i ] [li,ri] [li,ri]中有多少边不会被影响
发现这是一个类似于二维偏序的问题
离线,将询问按 r r r从大到小排序,用树状数组查询 &gt; = l i &gt;=li >=li的边数,然后将 y &gt; r i + 1 y&gt;r_{i+1} y>ri+1的边(默认 x &lt; y x&lt;y x<y)删去即可

【后记】IcePrincess_1968 和IcePrince_1968 其实只是一对兄妹而已。
出题人怕是《天龙八部》看多了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值