【11.2】【VP】Codeforces Round #728 (Div. 2)

ALL:6
AC:3
补题:1


B. Pleasant Pairs

题意:

给你一个长度为 n n n 的序列,且元素两两不同,你需要求出满足 i < j i<j i<j i + j = a i ⋅ a j i+j=a_i\cdot a_j i+j=aiaj 的数对个数。

n ≤ 1 0 5 , 1 ≤ a i ≤ 2 n n\le 10^5 , 1\le a_i \le 2n n105,1ai2n

思路:枚举每一个 a j a_j aj ,对于该数枚举倍数,即 a i a_i ai ,然后维护一个标记数组即可。

AC代码:https://codeforces.com/contest/1541/submission/178916763


C. Great Graphs

题意:

给你一个长度为 n n n 的序列 { d } \{d\} {d},你需要构造一个有向带权图,使得点 1 1 1 到点 i i i 的最短路长度为 d i d_i di,同时使得所有边的边权之和尽可能地

注意:图中不能出现负环重边

n ≤ 1 0 5 , 0 ≤ d i ≤ 1 0 9 n\le 10^5,0\le d_i\le 10^9 n105,0di109

思路:如果不考虑连接负边,构建出来的一定是一棵树,要让树边权之和最小,即把最短路从小到大排序,然后连接成一条链即可,差分数组即为连接的边权。

如果要连接负边,我们考虑一棵树,要连接负边,一定是在原树上 i → j ( w ) i\rightarrow j(w) ij(w) 的一条路径,我们反向连接 j → i ( − w ) j\rightarrow i(-w) ji(w) ,这样可以保证连接出来的正边和负边没有产生负环,一共是 n 2 n^2 n2 级别的边。

易知当连接成一条链时,上述两个贡献都是最小的,因此边权之和也是最小的。

AC代码:https://codeforces.com/contest/1541/submission/178917969


D. Tree Array

题意:

给定一棵 n n n 个节点的树。
对于这棵树,我们通过下列方法来生成一个序列:

  1. 等概率选择这 n n n 个节点中的一个节点,并对这个节点打上标记(初始时没有节点被打上标记);
  2. 在所有没被打上标记且与至少一个打上标记的节点相连的节点中等概率选择一个节点并对这个节点打上标记;
  3. 重复步骤 2 直到所有节点都被打上标记,此时生成的序列就是所有节点编号按照节点被打上标记的时间排序后的形成的序列。

求生成序列的期望逆序对数对 1 0 9 + 7 10^9+7 109+7 取模后的值。
2 ≤ n ≤ 200 ; 2\leq n\leq200; 2n200; 给出的是棵树。

题解:CF1540B Tree Array 题解

思路:一道好的概率期望题目。考虑枚举钦定根,并且枚举每一个逆序对 ( u , v ) (u,v) (u,v) ,计算该逆序对被选中的概率。易知从根节点取到该逆序对的概率,等于 lca(u,v) \text{lca(u,v)} lca(u,v) 取到该逆序对的概率。

我们可以思考用一个容器模拟这个取的过程,虽然这个过程中容器大小在变化,即取到一个点的概率是实时在变得,但是取到两个点方向的节点的概率是相等的。因此可以忽略其他点的影响。

d p i , j dp_{i,j} dpi,j 为从 ( u , v ) (u,v) (u,v) LCA \text{LCA} LCA出发,在链上走 i i i 步到 u u u ,在链上走 j j j 步到 v v v ,使得 u u u v v v 前面的概率。可以预处理。

AC代码:https://codeforces.com/contest/1541/submission/178924086

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值