20230812比赛

发布时间 2023-08-12 17:08:49作者: ZnPdCo

T1 【NOIP2014模拟】逻辑的连通性

就是一个强连通分量,对于大小为 \(n\) 的强连通分量,它的充要条件数量为 \(C^2_n=\frac{n(n-1)}{2}\)

用 Tarjan 过了。

T2 【NOIP2014模拟】树的连通性

我暴力过的,正解不是我。

我们使用前向星连边,认较小的为爹。跑 dfs 标记深度,然后对于删边操作,就直接把儿子的父亲标为自己(不用更新深度,因为查询时发现找到子树的根节点了,就是两个点不连通),对于查询联通操作,直接判断哪个边深度小,深度小的边向上爬(如果深度一样随便一个爬),直到两个点重合为止。如果找到根节点(包括子树的根节点),就结束,不连通。

对于修改权值操作,直接改。

T3 【NOIP2014模拟】图的连通性

被坑了QWQ。

比赛时想到了正解,但是以为要在线。其实是强制离线。因为当前操作之前图中剩余的边数,可以很容易算出来。我们用并查集,既然并查集删边难,那我们就让时光倒流,先处理出最后局面,对于删边操作,就连边,对于查询操作,就并查集查询。

然后介绍一个正反方向前向星的方法,就是让cnt从1开始,i^1就是反向边。

T4 【NOIP2019模拟11.07】极好的问题

极好的三元组有以下三种情况:

  • \(a,a,a\)
  • \(a,a,b\)
  • \(a,b,c\)

对于第一种情况,可以统计每个出现次数大于等于 3 的数的三次方 (在 模P 意义下) 是否等于 1 。

对于第二种情况,统计每个出现次数大于等于 2 的数的二次方乘去重序列中的其它数 (在 模P 意义下) 是否等于 1

对于第三种情况,预处理出所有两个不同的数的乘积,并在预处理中特判 \(a\times b=a'\)\(a\times b=b'\) 的情况。因为此时等价于情况二,不特判会导致重复计算。然后求出每个数的乘法逆元在这些乘积中出现的次数。这些次数之和会反复出现三次,所以记得除以3。