其他分享
首页 > 其他分享> > 2022.7.22 做题记录

2022.7.22 做题记录

作者:互联网

为啥昨天没发做题记录呢

因为昨天颓了一天就写了一个题,就酱

CF246E Blood Cousins Return Present 6

给定 \(n\) 个节点的一片森林,每个节点上有一个字符串。

有 \(m\) 次询问,每次给出 \(v,k\),你需要输出 \(v\) 子树内深度为 \(d_v+k\) 的节点上有多少个不同的字符串。

其中 \(d_u\) 表示 \(u\) 的深度。\(1\le n,m\le 10^5\)。

套路地拆出来每一层的节点,按照 \(\text{DFS}\) 序排序,现在相当于查询一个区间内去重后的元素个数。

设 \(p_i\) 为 \(i\) 这一字符串上一次出现的位置,转化为二维数点,离线后用树状数组处理即可。

AC Code

Luogu8149 泪光 | Tears Future 7.5

原题题意有点缝合的感觉,这里给出转化后的题意:

有 \(n\) 个变量 \(v_1,\cdots,v_n\),现在有 \(m\) 次操作:

  • 1 a b c d:已知一个新条件:若 \(v_a=v_b\),则 \(v_c=v_d\)。
  • 2 a b:已知一个新条件:\(v_a=v_b\)。
  • 3 a b:询问是否能确定 \(v_a,v_b\) 恒相等。
  • 4 b:询问有多少个 \(a\) 满足:能够确定 \(v_a=v_b\)。

\(1\le n,m\le 6\times 10^5\)。吐槽:为啥正解 \(O(n\log ^2n)\) 还给个这么大的范围啊 QwQ

不难发现条件二相当于连边,两个询问分别是「查询两点是否连通」以及「查询某点所在连通块大小」。

对于第一种条件,我们分两种情况讨论:

由于每个三元组只会被合并 \(O(\log n)\) 次,时间复杂度为 \(O(n\log ^2n)\)。AC Code

SP21615 NAJPWG - Playing with GCD Present 7.0

有 \(T\) 组询问,每次给出正整数 \(n\),求

\[\sum_{i=1}^n\sum_{j=i}^n[\gcd(i,j)>1] \]

\(1\le n,T\le 10^5\)。

萌萌推式子题

交换求和顺序

\[\sum_{i=1}^n\sum_{j=1}^{i}[\gcd(i,j)>1] \]

简单容斥

\[\sum_{i=1}^ni-\left(\sum_{j=1}^i[\gcd(i,j)=1]\right) \]

发现后面就是 \(\varphi(i)\),所以变为求 \(i-\varphi(i)\) 的前缀和

随便预处理一下就完事了,\(O(n)-O(1)\)。AC Code

推式子题真好玩,明天再来一道

标签:连边,连通,le,22,记录,sum,三元组,2022.7,节点
来源: https://www.cnblogs.com/YunQianQwQ/p/16508026.html