首页 > 其他分享 >【题解】CTT 2020 Day 1

【题解】CTT 2020 Day 1

时间:2023-02-26 21:47:51浏览次数:57  
标签:CTT 二度 那么 一度 题解 询问 叶子 2020 考虑

目录

A. 术树数

注意到路径 + 环的组合仍然可行,因为我们可以在无影响的情况下加入环(显然一条边也算二元环)。而对于每条边,如果其在某些环内,只要保留任意一个就行(剩下的可以通过操作得出)。

于是只要用 k 进制线性基就做完了。提交记录:Submission #76089 - QOJ.ac

B. 树数术

考虑前段区间的 LCA 为 \(u\),在当前区间二分找到最后一个与 \(u\) 做 LCA 后会变的前缀,这段前缀一定不会成为答案,而在这段前缀之后的区间不受之前的影响。因此对于剩下的部分,预处理每个点往前走的最远距离,然后只需要数剩下区间中有多少数满足要求即可,是个二维数点。

提交记录:Submission #76130 - QOJ.ac

C. 述树术

Subtask #1

  • 首先考虑找到所有的叶子节点,注意到令 \(I\) 为全集,那么询问 \(I-\{x\}\) 得到的结果:如果是 \(n-1\),那么是叶子节点,否则就一定不是。
  • 这样就找到了所有的叶子,令叶子集合为 \(L\) 。接着就只需要考虑求出每个点的父亲了。注意到令 \(x\) 是某个叶子节点,询问 \(L-\{x\}\) 会得到 \(n-2\),减去的是 \(x\) 和 \(y=\mathrm{fa_x}\) 。
  • 那么考虑令 \(V=I-L\),每一次可以拿出 \(V'\subseteq V\),然后询问 \(L-\{x\}+V'\):如果得到 \(n-1\),说明 \(y\in V'\),否则 \(y\not\in V'\) 。
  • 这样的话,将所有的叶子的父亲找到后,就将所有的叶子丢掉,此时它们的父亲成为了新的叶子,那么继续上面的过程就能将所有点的父亲找到了。
  • 同时注意到因为 \(c_0=c_2+1\),那么 \(|V|\leq \frac{n}{2}\),也就是说二分次数是 \(8n\),加上最开始找叶子需要的 \(n\) 次询问,总共是 \(9n\) 次,可以通过。

Subtask #2

  • 注:如果一个点有 \(k\) 个儿子,则称其为 \(k\) 度点。
  • 此时最开始的一步就出现了问题:询问 \(I-\{x\}\) 时,只要 \(x\) 不是二度点,都会得到 \(n-1\) 。那么不妨先考虑询问 \(I-\{x\}\) 将二度点分开,并且令叶子、一度点的集合为 \(L\) 。
  • 接着考虑询问 \(L-\{x\}\) 得到的结果:如果是 \(n-2\) 的话,说明 \(x\) 是叶子,并且父亲是二度点,否则无法说明什么。
  • 注意到,如果一个叶子的父亲是一度点,或者一个一度点的父亲是一度点,那么我们没有办法区分它们到底谁在上面谁在上面,这个时候就 GG 了。那么到时候将无解的情况判掉,现在我们要处理的就是这样一种情况:所有的叶子和一度点的父亲都是二度点。
  • 此时仍然考虑询问 \(L-\{x\}\),那么如果得到了 \(n-2\) 说明 \(x\) 是叶子,否则说明 \(x\) 是一度点。先不考虑一度点,建出叶子和二度点构成的树,然后将一度点插进去。
  • 考虑令 \(L_0\) 表示叶子集合,如果对于 \(L_0'\subseteq L_0\) 和一个一度点 \(x\),询问 \(L_0'+\{x\}\):如果得到 \(n+1\),说明加进来的仅有 \(x\),\(x\) 的子树中存在 \(L_0\) 中的点;否则如果 \(x\) 的子树中不存在 \(L_0'\) 中的点的话,得到的结果一定为 \(n+2\),因为同时加进来的还有 \(\mathrm{fa}_x\) 。
  • 那么考虑边分治,令当前分治中心为 \((u,v),\mathrm{fa}_v=u\),同时令 \(L_{0,v}\) 表示 \(v\) 子树内的叶子集合。对于一度点 \(x\),可以通过询问 \(L_0-L_{0,v}+\{x\}\) 来判断 \(x\) 是否属于 \(v\) 的管辖范围内(因为是找每条边上有没有一度点,所以 \(v\) 的管辖范围其实包含 \((u,v)\)) 。
  • 无解的情况也方便讨论。此时复杂度仍然能使用上面的分析,因为总点数是 \(n\),每个点的代价都是 \(\log n\) 。据说上界是 \(10408\),不太理解为什么出题人将上界出了这么紧 ...

标签:CTT,二度,那么,一度,题解,询问,叶子,2020,考虑
From: https://www.cnblogs.com/qiulyqwq/p/17157815.html

相关文章

  • 【题解】CTT 2020 Day 3
    目录A.计数鸡B.PerotationC.树特卡克林A.计数鸡考虑\(\sum\limits_{i}\sum\limits_{j>i}[p_i\geqp_j]+[(p_i+h_i)\geqq_j]\),前部分是逆序对,而偶数让人想到行列式......
  • 【题解】CTT 2019 Day 2
    目录A.循环序列B.MatrixC.杀蚂蚁简单版A.循环序列即求\(\sum\limits_{i=0}^{c}{k\choosem+in}\),即\(\frac{1}{n}\sum\limits_{j=0}^{n-1}\sum\limits_{i=0}^{k-m}......
  • 【题解】CTT 2019 Day 1
    目录A.递增树列B.异世界的文章分割者C.时间旅行A.递增树列令\(f_{u,i}\)表示\(u\)的子树,已经用掉\(i\)个点,剩下的点排列满足要求的方案数。考虑方案的计算,用......
  • 【题解】CTT 2018 Day 2
    目录A.宝石游戏B.面国建设C.WechatA.宝石游戏无修改时考虑长链剖分(加整体异或标记)。有修改时分块,不考虑关键点层长链剖分,最后算答案的时候处理关键点层的答案即可。......
  • 题解 CF1776F【Train Splitting】
    题意:有一个\(n\)点\(m\)边简单无向连通图,请用若干(至少为\(2\))种颜色对每条边染色,使得:对于每种颜色,仅由该颜色的边组成的生成子图不连通。对于每两种颜色,仅由该颜色......
  • Codeforces Global Round 15 CF1552 A~G 题解
    点我看题对两三年前的cf进行考古的时候偶然做到这场,像这种全是构造题和思维题的比赛还是比较少见的。题目本身很有意思,但是对于现场打比赛想上分的人来说体验就比较差了。......
  • P6659 [POI 2019] Najmniejsza wspólna wielokrotność 题解
    题意给定一个整数\(M\),求是否存在一个区间\([a,b]\)使得\(M\)为\([a,b]\)这个区间中所有数的最小公倍数。解题方法1.区间长度\(=2\)。二分查找\(a\),由于相......
  • 2023 年 CCF 春季测试赛模拟赛 - 2 题解
    T1约数和标准解法\(n=a_1^{b_1}\timesa_2^{b_2}\dotsa_k^{b_k}\)那么根据算术基本定理的推广,约数个数和约数和都是可以快速计算得到约数和sum\(sum=(a_1^0......
  • CF1776M 题解
    引理1:若\(n\)为偶数,则答案为\(n\)。若\(n\)是叶子,则显然正确。若\(n\)不是叶子,则将整棵树看做以\(n\)为根的有根树,一定可以保证最后一个被删除的是根。故得......
  • AtCoder Beginner Contest 281 A-F 题解
    比赛链接A-CountDown先这样,就这样。点击查看代码#include<cstdio>intn;intmain(){ scanf("%d",&n); for(inti=n;i>=0;i--)printf("%d\n",i); re......