【IOI 2018】Werewolf 狼人】的更多相关文章

[题目链接] https://www.luogu.org/problemnew/show/P4899 [算法]         建出原图的最小/最大生成树的kruskal重构树然后二维数点 时间复杂度 : O((N+Q)logN) [代码] #include<bits/stdc++.h> using namespace std; #define N 200010 #define M 400010 #define MAXLOG 20 typedef long long ll; typedef l…
[IOI2018] werewolf 狼人 IOI2018题解 (其实原题强制在线,要用主席树) 代码: 注意: 1.下标从0~n-1 2.kruskal重构树开始有n个节点,tot从n开始,++tot #include<bits/stdc++.h> #define reg register int #define il inline #define numb (ch^'0') using namespace std; typedef long long ll; il void rd(int…
[IOI2018] werewolf 狼人 LG传送门 kruskal重构树好题. 日常安利博客文章 这题需要搞两棵重构树出来,这两棵重构树和我们平时见过的重构树有点不同(据说叫做点权重构树?),根据经过我们简化的建树方法,这两棵树不再是二叉树,但是仍具有kruskal重构树的优秀性质,建议结合后面的描述理解. 看这题需要首先我们从\(S\)走到\(T\)转化为分别从\(S\)和\(T\)出发寻找能共同到达的点,需要快速求出从某个点出发经过点权不大(小)于\(r\)(\(l\))的点,考虑kru…
P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯从 \(1\) 开始标号,所以以下讲解中的标号都是从 \(1\) 开始的 从 \(s\) 开始走,只走点 \(L,L+1,\cdots,n\),能走到的点集记为 \(V_1\) 从 \(e\) 开始,只走 \(1,2,\cdots,R\),能走到的点集记为 \(V_2\) 则,若 \(V_1\cap…
虽然作为IOI的Day1T3,但其实不是一道很难的题,或者说这道题其实比较套路吧. 接下来讲解一下这个题的做法: 如果你做过NOI 2018的Day1T1,并且看懂了题面,那你很快就会联想到这道题,因为两者都是问某一个点能到达的点集,只不过限制在点上还是边上的问题. $Kruskal$重构树可以把在边上的限制转化成点上的,于是能解决NOI 2018的Day1T1:那么这道题就可以直接做,因为限制已经在点上了. 具体来讲,从$s$点只能走编号$>=l$的点,那么我们就构建一棵树,使得任意一个非根节…
题目链接 IOI的签到题感觉比NOI的签到题要简单啊,至少NOI同步赛我没有签到成功…… 其实这个题还是挺妙妙的,如果能够从题目出发,利用好限制,应该是可以想到的做法的. 接下来开始讲解具体的做法: 题目中有一个重要的限制就是答案序列首字母不会出现多次,这意味着当我们知道首字母后,接下来序列中的候选字符就只剩下$3$个了,以及我们可以在一个询问中用首字母来分割多个你想要知道的字符串. 很显然我们可以用二分找到首字母,这将花费$2$次询问机会.方便起见,我们把首字母定为$a$,剩下的$3$个字符分…
这是一道极好的图论题,虽然我一开始只会做$18$分,后来会做$51$分,看着题解想了好久才会做(吐槽官方题解:永远只有一句话),但这的确是一道好题,值得思考,也能启发思维. 如果要讲这道题,还是要从部分分一点一点讲起,毕竟解题时的思路也是慢慢这么推进的. 首先第一次把所有边都变成同一种颜色,询问可以得到$s$到$t$的无权最短路径的长度$dist$.这个询问是必须的,因为这个$dist$在接下来的判定中起来很大的作用. $Subtask 2$:给定一棵树,知道$s$是根,求$t$: 这个问题将作…
我感觉这个题作为Day2T1,有一定的挑战性.为$Rxd$没有完成这道题可惜. 我觉得这道题,如果按照前几个部分分的思路来想,就有可能绕进错误的思路中.因为比如说每个传感器最多只在序列中出现$2$次,很有可能会想到分别在每一个传感器之后用开关来控制.我在做这个题的时候就因为这个思路陷入僵局.事实上这个做法的弊端十分明显,首先如果可行的话,实现起来也会十分复杂,毕竟所有传感器序列中交错复杂,难于处理:其次,对于每一个传感器分别使用开关很可能导致开关的浪费. 这道题的两个关键的想法都源于其中的两个部…
luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从\(S\)出发只经过\(\ge L\)的点,和从\(T\)出发只经过\(\le R\)的点有没有交集. 分别建两棵最大/最小\(\mbox{Kruskal}\)重构树,这样从\(S\)出发,从\(T\)出发能到达的点就分别是两棵树上的一个子树.以点在两棵树上的\(dfs\)序作为两维坐标,每次询问就…
感觉已经几次碰到这种类型的题目了,写篇\(Blog\)总结一下 题意: 是否存在一条\((s_i, t_i)\)的路径,满足先只走编号不超过\(L_i\)的点,再走编号不超过\(R_i\)的点 \(Solution\): 对于这种限定经过点数的题目,可以比较自然地想到重构树: 由于前后都有限定,我们考虑建两颗重构树 第一颗按照边权为两个端点编号的最小值构建重构树,重构树每个点的点权\(x\)表示不经过边权超过\(x\)的边能到达的所有点: 第二颗则按照边权为两个端点最大值来构建重构树,重构树上每…