UOJ_407_【IOI2018】狼人】的更多相关文章

[IOI2018]狼人 luogu UOJ 对人形和狼形分别建克鲁斯卡尔重构树 每次询问就是对于两棵树dfs序的一个二维数点,主席树维护 #include<bits/stdc++.h> using namespace std; const int _=4e5+5; int re(){ int x=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'…
LOJ 洛谷 这题不就是Peaks(加强版)或者归程么..这算是\(IOI2018\)撞上\(NOI2018\)的题了? \(Kruskal\)重构树(具体是所有点按从小到大/从大到小的顺序,依次加入这些点的边),我们可以得到两棵树(和那两题不一样的是这题的权值在点上,不需要新建节点). 对于询问\((S,T,L,R)\),可以倍增找出\(S,T\)可以在哪棵子树中随便走. 那么只需要判断两棵子树是否有交就可以惹. 注意到子树的DFS序是连续的,我们可以在第一个子树的某个数据结构上,查第二个子树…
题目链接: IOI2018werewolf 题目大意:给出一张$n$个点$m$条边的无向图,点和边可重复经过,一个狼人初始为人形,有$q$次询问,每次询问要求人形态只能处于编号不小于$L$的点,狼形态只能处于编号不大于$R$的点,询问能否从$S$处于人形态然后在编号在$[L,R]$内的点变身一次成为狼人然后到达 $E$. 题目中编号都是从0开始,太不舒服了,我们按编号从1开始讲QAQ. 题目大意就是询问每次从一个点开始走只能走编号在[l,n]中的点,在任意点变成狼,之后只能走[0,r]中的点,是…
可以发现询问的即是“由起点开始‘只经过编号大于等于l的点’所形成的连通块”与“由终点开始‘只经过编号小于等于r的点’所形成的连通块”是否有交集.于是建出重构树,就可以知道每个询问的连通情况了.现在要知道的是两个连通块的交集,考虑每个点是否有可能在里面.于是按照两棵重构树的dfs序给每个点一个二维坐标,问题就变为二维数点了,主席树即可. 注意编号从0开始. #include<iostream> #include<cstdio> #include<cmath> #inclu…
考试注意事项:link1 link2 (密码:wangle) 调不出来bug,可以先透彻一会儿或者是上个厕所或者坐一会别的题(间隔至少20min),然后通读代码 -1. 考试先读题,读题之后搞出一个做题规划 做一些duliu题,人脑内存不够时,把纸和笔当内存用 不要相信你的人脑内存 /2是向零取整,如果写权值线段树需要开负数下标,那么一定要用>>1而不是/2(这个在FFT上没啥区别,但是开负数下标就GG了)(MloVtry的咸鱼树) upd:会炸int就 (cl + (long long)cr…
克鲁斯卡尔重构树 又叫并查集重构树 大概在NOI2018之前还是黑科技 现在?烂大街了 主要是针对图上的对边有限制的一类问题 比如每次询问一个点u不能经过边权大于w的边能走到的第k大点权是多少 也就是这个题peaks 首先肯定是一个最小生成树(如果不知道为什么还可以先做货车运输) 我们在并查集合并的时候稍作修改 每次不是fa[x]=y而是fa[x]=fa[y]=++tot 这样相当于新建了一个点连接两棵树,tot的点权根据题目需要确定 peaks这题点权就是所连边的边权 我们发现这样子构出来的树…
更新完了? ghj1222这个智障因为NOIP考的太菜没有去THUWC和PKUWC,但是NOIWC还是苟进去了 由于已经结束了,好多事实忘了,所以可能不完整 2019/1/23 Wednesday 明天该走了,早上买了两桶泡面,是有点小兴奋,之前没坐过飞机虽然说我想坐火车去,火车上可以透彻啊 要是按照姓氏分宿舍就要被rqy大佬虐了 晚上Virtual participation Codeforces Round #530 (Div. 2),Div2题不难,110分钟AK,掉rp,感觉WC要凉 这…
http://uoj.ac/problem/407 分析: 分别建立最小/最大kruskal重构树. 每次询问给出的两个点能走到的部分分别对应两棵树\(dfs\)序的一段区间. 转化成判断矩形中是否有点. 代码: #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath> #include "werewolf.…
[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…