LOJ 思路 考虑最蠢的暴力:枚举2~n,从1拉一条到他们的链,需要查询\(n^2\)次,显然不能通过. 考虑优化:如果拉的第一个点已经被访问过了,那么类似二分的做法,一次往那个方向多跳几步. 多跳几步?那就动态点分治吧.每次最多跳\(\log n\)次就一定可以找到一个点使得它到你现在枚举的点的路径全都没有访问过,然后一次把这上面的点全都explore一边即可. 然而,树的形态你不知道,怎么动态点分治? 那就动态动态点分治啊2333 类似替罪羊树的思想,加点时直接连上去,每当某个节点\(u\)…
loj2341「WC2018」即时战略(随机化,LCT/动态点分治) loj Luogu 题解时间 对于 $ datatype = 3 $ 的数据,explore操作次数只有 $ n+log n $ . 毫无疑问无论什么时候已经探索的区域都是一条链. 每当要探索出一个新点,不是在左侧就是在右侧. 最劣情况下调用次数为 $ 2n $ . 只要随机打乱探索顺序,额外浪费的次数类似于上升子序列长度,期望 $ logn $ ,可以解决. 而对于其余数据,依然随机打乱探索顺序, 每次对于目标点,要点在于找…
「WC2018」即时战略 考虑对于一条链:直接随便找点,然后不断问即可. 对于一个二叉树,树高logn,直接随便找点,然后不断问即可. 正解: 先随便找到一个点,问出到1的路径 然后找别的点,考虑问出来第一个从1过来的未知位置,就可以一口气问下去了. 怎么找? logn询问次数 法一: 点分治 有点类似:CF772E Verifying Kingdom 可以直接确定走向 暴力插入点,替罪羊重构 O(nlog^2n) 法二: LCT 直接在实链上不断二分,然后跳到下一个实链上 复杂度分析可以类比a…
题目链接: [WC2018]即时战略 题目大意:给一棵结构未知的树,初始时除1号点其他点都是黑色,1号点是白色,每次你可以询问一条起点为白色终点任意的路径,交互库会自动返回给你这条路径上与起点相邻的节点并且如果这个点为黑色则将它变为白色,要求在不多于给定次数的询问内使所有点变为白色. 大致思路为按一定顺序分别将n-1个点变为白点,为了防止被卡,需要对2~n的序列随机打乱再按打乱后的顺序逐个变白. 数据范围分为三种,分开讲解(假设当前要变白的点为x): 一.完全二叉树 这一部分比较简单,我们只需要…
[WC2018]即时战略(动态点分治,替罪羊树) 题面 UOJ 题解 其实这题我也不知道应该怎么确定他到底用了啥.只是想法很类似就写上了QwQ. 首先链的部分都告诉你要特殊处理那就没有办法只能特殊处理了QWQ. 首先听说有一种均摊\(log\)的\(LCT\)做法. 即每次随便\(explore\)一个点,如果这个点未被访问过,直接加入然后继续. 否则在\(LCT\)重链组成的\(Splay\)上跳. 这样子均摊复杂度是\(O(nlogn)\),均摊的询问次数也是\(O(nlogn)\). 然而…
「WC2018」州区划分(FWT) 我去弄了一个升级版的博客主题,比以前好看多了.感谢 @Wider 不过我有阅读模式的话不知为何 \(\text{LATEX}\) 不能用,所以我就把这个功能删掉了. 洛谷上不开 \(O_2\) 根本过不去,自带大常数被卡到 \(15\) 分... 首先题了读了很久,发现一个州的集合可以不连通... 我们可以 \(O(n^22^n)\) 检验每一个状态是否满足条件,用并查集即可. \(f[S]\) 为状态 \(S\) 时的满意度之和,\(g[S]\) 当状态 \…
这是一道交互题 题目大意 有一棵\(n\)个点的树.最开始\(1\)号点是白的,其他点是黑的. 每次你可以执行一个操作:\(explore(x,y)\).要求\(x\)是一个白点.该函数会返回从\(x\)到\(y\)的路径上第二个点的坐标并把该点染白. 要求你把所有点都染成白色. 设操作次数为\(t\). 对于\(30\%\)的数据:这棵树是一条链(不保证\(1\)在链的一端),\(n=300000,t=O(n+\log n)\) 对于另外\(70\%\)的数据:\(n=300000,t=O(n…
题目描述 小M在玩一个即时战略(Real Time Strategy)游戏.不同于大多数同类游戏,这个游戏的地图是树形的. 也就是说,地图可以用一个由 n个结点,n?1条边构成的连通图来表示.这些结点被编号为 1 ~ n. 每个结点有两种可能的状态:“已知的”或“未知的”.游戏开始时,只有 1号结点是已知的.在游戏的过程中,小M可以尝试探索更多的结点.具体来说,小M每次操作时需要选择一个已知的结点 x,和一个不同于 x 的任意结点 y(结点 y 可以是未知的). 然后游戏的自动寻路系统会给出 x…
题目 交互题: 一开始所有点都是黑的,你需要把所有点变白: explore(u,v)会将u到v路径上的第二个点变白: 一开始只有1号点是白色的,你需要让所有点变白: 对于一条链次数限制\(O(n+log \ n)\),普通的树次数限制\(O(n \ log \ n)\) ; 题解 orz yww Part 1 白色区间一定是一条链,记录左右端点; 先假设新点在左边用左端点扩展,如果explore出重复的点,则说明在右边换右端点: 这样一直扩展,最坏\(O(2n)\),期望\(O(n+log \…
传送门 头一次看着题解有一种咱不会\(c++\)的感觉-- 看题解吧-- //minamoto #include<bits/stdc++.h> #include "rts.h" #define R register #define get explore #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(…