首页 > 其他分享 >[CF1943C] Tree Compass 题解

[CF1943C] Tree Compass 题解

时间:2024-03-17 09:00:46浏览次数:26  
标签:上述 题解 over Tree 构造 直径 操作 CF1943C 最优

不会 2300,完蛋了/lh

题目链接

题目分析

容易想到先求出直径,然后以直径中点为圆心画 \({d \over 2} + O(1)\) 个圆。

具体地,设直径点数为 \(d\)。当 \(d\) 为奇数时,上述构造需要 \(d + 1 \over 2\) 次操作;当 \(d\) 为偶数时,上述构造需要 \({d \over 2} + 1\) 次操作。

尝试证明上述构造是最优的。观察到对于一条链,一次操作至多将链上两个点染成黑色,因此 \(d\) 为奇数的情况已经最优,但是 \(d\) 为偶数的情况不一定。

手画一下,发现 \(d = 4\) 的情况确实不一定最优,但是 \(d = 6\) 的情况似乎一定最优,但是 \(d = 8\) 的情况又不一定最优。因此可以猜测上述构造方式最优当且仅当 \(4 \nmid d\)。

当 \(4 \nmid d\) 时,上述构造最优是易证的:如果一次操作将链上两个点染成黑色,那么这两个点在链上的位置一定同奇偶。

当 \(4 \mid d\) 时怎么办?这时候就到了本题诈骗的地方。\(n \le 2 \times 10^3\) 的范围很容易让人想到 \(O(n^2)\) 的复杂度,然而正解是 \(O(n)\) 的。考虑把两个直径中点都利用起来,对这两个点同时进行一次距离为 \(1\) 的操作能把中间四个点都染黑,再对这两个点同时进行一次 \(d = 3\) 的操作能够把中间八个点都染黑,依此类推,我们构造出了 \(d \over 2\) 次操作的解法。这一定是最优的。

时间复杂度 \(O(n)\)。

提交记录

标签:上述,题解,over,Tree,构造,直径,操作,CF1943C,最优
From: https://www.cnblogs.com/ClHg2/p/18078083

相关文章

  • AT_abc345_d 题解
    是个逆天搜索。最开始:爆搜,启动!然后TLE到飞起。赛后:我【数据删除】这么简单的吗?!dfs每个位置,试着把没放过的块放到以这个位置为左上角的区域里面。好了没了,就是这么简单!对了记得这个块可以旋转!#include<stdio.h>#include<bits/stdc++.h>#defineN1000010#defineMOD9......
  • 关于nvim插件telescope-fzf-native在windows下未构建的问题解决
    关于nvim插件telescope-fzf-native在windows下未构建的问题解决首先进入文件夹(没有就自己创建注意文件夹名就是telescope-fzf-native.nvim)C:\Users\...\AppData\Local\nvim-data\site\pack\packer\start\telescope-fzf-native.nvim进入此路径的powershell或者cmd命令行,执行......
  • 启动应用程序出现cmdial32.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个cmdial32.dll文件(挑选合适的版本文件)把它......
  • 启动应用程序出现comcat.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个comcat.dll文件(挑选合适的版本文件)把它放......
  • CF56D Changing a String 题解
    双倍经验:P2758。令\(dp_{i,j}\)表示\(s\)前\(i\)个字符要变成\(t\)前\(j\)个字符所需的最少移动次数。答案即为\(dp_{\lverts\rvert,\lvertt\rvert}\)。显然有初始状态\(dp_{i,0}=dp_{0,i}=i\)。因为我们只可能从添、删、替三种操作转移而来,于是有转移方程:......
  • P4211 [LNOI2014] LCA 题解
    link切入这道题,首先要思考所有LCA的分布特征。显然,对于任意\(\text{LCA}(i,j)\),都满足LCA是\(i,j\)的祖先。那么对于一个询问,可以找到所有\(i\in[l,r]\)的祖先,还可以找所有\(z\)的祖先。明显,找\(z\)的祖先会方便很多:它们都分布在\(z\)到根节点的那条链上,这应......
  • 邻接表存储带权的无向图(c++题解)
    题目描述给出一个无向带权图,顶点数为n,边数为m。输入格式第一行两个整数n,m,接下来有m行,每行3个整数u,v,w,表示点u到点v有一条边,边权为w。输出格式第i行输出第点i的所有邻接点,按照点i到该点的边权由小到大输出,如果边权相等,则按照点的编号有小到大输出。样例样例输入复......
  • 有向图的DFS(c++题解)
    题目描述给定一个有向图(不一定连通),有N个顶点,M条边,顶点从1..N依次编号,求出字典序最小的深度优先搜索顺序。输入格式第1行:2个整数,N(1≤N≤200)和M(2≤M≤5000)接下来M行,每行2个整数I,J,描述一条边从顶点I指向顶点J输出格式仅一行,一个顶点编号序列,表示字典序最小的深度优先搜索......
  • 首师大附中集训D6日报(20231215)-题解部分
    T1是dp设fi0不含k的情况书fi1含k的情况数第一步优化:前缀和维护f两个数组的前缀和通过前缀转移第二步优化:发现前缀和能矩阵乘法优化,所以矩阵快速幂就可以说起来挺简单,式子也不算难推,但就特别难写,主要的难度在于设置矩阵上面T2不知怎么一直卡在35,但是打的总体上肯......
  • 矿场搭建 题解
    题目描述煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。请写一个程序,用来计......