[UOJ题面]http://uoj.ac/problem/349 一道非常好的与数据结构有关的交互题. 首先先看部分分做法, 一上来我们肯定得钦定一个 \(explore\) 的顺序,直接随机就好. 当 \(n\) 很小的时候就是直接从 1 号点一路 \(explore\) 过去就好了,这样次数是 \(O(n^2)\) 的. 由于完全二叉树树高是 log 的,所以它实际也能过第二个包. 然后来看一下链的情况,稍加思考我们可以得到这么一个做法:就是维护当前已经 \(explore\) 的点的连续区…
题目链接: [WC2018]即时战略 题目大意:给一棵结构未知的树,初始时除1号点其他点都是黑色,1号点是白色,每次你可以询问一条起点为白色终点任意的路径,交互库会自动返回给你这条路径上与起点相邻的节点并且如果这个点为黑色则将它变为白色,要求在不多于给定次数的询问内使所有点变为白色. 大致思路为按一定顺序分别将n-1个点变为白点,为了防止被卡,需要对2~n的序列随机打乱再按打乱后的顺序逐个变白. 数据范围分为三种,分开讲解(假设当前要变白的点为x): 一.完全二叉树 这一部分比较简单,我们只需要…
「WC2018即时战略」 题目描述 小 M 在玩一个即时战略 (Real Time Strategy) 游戏.不同于大多数同类游戏,这个游戏的地图是树形的.也就是说,地图可以用一个由 \(n\) 个结点,\(n - 1\) 条边构成的连通图来表示.这些结点被编号为 \(1 \sim n\). 每个结点有两种可能的状态:"已知的"或"未知的".游戏开始时,只有 \(1\) 号结点是已知的. 在游戏的过程中,小 M 可以尝试探索更多的结点.具体来说,小 M 每次操作时需…
这是一道交互题 题目大意 有一棵\(n\)个点的树.最开始\(1\)号点是白的,其他点是黑的. 每次你可以执行一个操作:\(explore(x,y)\).要求\(x\)是一个白点.该函数会返回从\(x\)到\(y\)的路径上第二个点的坐标并把该点染白. 要求你把所有点都染成白色. 设操作次数为\(t\). 对于\(30\%\)的数据:这棵树是一条链(不保证\(1\)在链的一端),\(n=300000,t=O(n+\log n)\) 对于另外\(70\%\)的数据:\(n=300000,t=O(n…
交互题 一棵树,一开始只有 1 号点是已知的,其他的都是未知的,你可以调用函数 explore(x,y) ,其中 x 必须是已知的,函数会找到 x 到 y 路径上第二个点,并把它标成已知,求最小步数使整棵树都已知 对于 30% 的数据,是一条链,操作次数 $O(n+logn)$ 剩下的数据,操作次数 $O(nlogn)$ $n \leq 300000$ sol: 先吐槽 loj 的交互题评测机制 把 ac 时应该输出的东西输出,然后就 a 了 不 shing 话 链的情况想了半天,题解是 xjb…
题目链接 题意 一开始已知一号点. 每次可以选定一个已知点和一个未知点,然后交互库会返回从已知点出发到达未知点路径上的第二个点. 要求在有限步之内知道每一个点. 次数要求: 链的情况要求 \(O(n)\) 其余是 \(O(nlogn)\) Sol 首先是链的情况,记录当前左右端点不断往后探索即可. 然后是树,初始想法肯定就是不断迭代,最坏情况是 \(O(n^2)\) 的. 我们的瓶颈在于如果树的深度比较大,我们迭代的时候来回走了很多个圈就不好处理. 那么我们很容易想到用点分树来优化我们迭代的过程…
loj2341「WC2018」即时战略(随机化,LCT/动态点分治) loj Luogu 题解时间 对于 $ datatype = 3 $ 的数据,explore操作次数只有 $ n+log n $ . 毫无疑问无论什么时候已经探索的区域都是一条链. 每当要探索出一个新点,不是在左侧就是在右侧. 最劣情况下调用次数为 $ 2n $ . 只要随机打乱探索顺序,额外浪费的次数类似于上升子序列长度,期望 $ logn $ ,可以解决. 而对于其余数据,依然随机打乱探索顺序, 每次对于目标点,要点在于找…
Description 有一棵n个点的结构未知的树,初始时只有1号点是已被访问的. 你可以调用交互库的询问函数explore(x,y),其中x是已访问的点,y是任意点. 它会返回x向y方向走第一步的点,如果该点未被访问,则将其标记为已访问. 你需要实现一个函数,它通过接口得到n和T,需要在T次explore操作内将所有的点标记(也就是说走完这棵树). 要求最严格的两档数据: n<=300000,T<=300020,且原树为一条链(1号点不一定是端点). n<=300000,T<=5…
[WC2018]即时战略(动态点分治,替罪羊树) 题面 UOJ 题解 其实这题我也不知道应该怎么确定他到底用了啥.只是想法很类似就写上了QwQ. 首先链的部分都告诉你要特殊处理那就没有办法只能特殊处理了QWQ. 首先听说有一种均摊\(log\)的\(LCT\)做法. 即每次随便\(explore\)一个点,如果这个点未被访问过,直接加入然后继续. 否则在\(LCT\)重链组成的\(Splay\)上跳. 这样子均摊复杂度是\(O(nlogn)\),均摊的询问次数也是\(O(nlogn)\). 然而…
「WC2018」即时战略 考虑对于一条链:直接随便找点,然后不断问即可. 对于一个二叉树,树高logn,直接随便找点,然后不断问即可. 正解: 先随便找到一个点,问出到1的路径 然后找别的点,考虑问出来第一个从1过来的未知位置,就可以一口气问下去了. 怎么找? logn询问次数 法一: 点分治 有点类似:CF772E Verifying Kingdom 可以直接确定走向 暴力插入点,替罪羊重构 O(nlog^2n) 法二: LCT 直接在实链上不断二分,然后跳到下一个实链上 复杂度分析可以类比a…