传送门 IOI强行交互可还行,我Luogu的代码要改很多才能交到UOJ去-- 发现问题是对边权做限制的连通块类问题,考虑\(Kruskal\)重构树进行解决. 对于图上的边\((u,v)(u<v)\),我们建两棵\(Kruskal\)重构树,一棵按照\(u\)从大到小加边表示人形时的活动区域,一棵按照\(v\)从小到大加边表示狼形时的活动区域. 那么我们的每组询问就变为了:给出两段区间,询问是否存在一个点同时覆盖这两个区间(即人形转换为狼形的地点).这个是经典的二维数点问题,使用主席树计算即可.…
这个知识点好像咕咕咕了好长了..趁还没退役赶紧补一下吧.. 讲的非常简略,十分抱歉.. 前置知识 Kruskal算法 一定的数据结构基础(如主席树) Kruskal重构树 直接bb好像不是很好讲,那就从这道题入手吧. 在Bytemountains有$N$座山峰,每座山峰有他的高度$h_i$. 有些山峰之间有双向道路相连,共$M$条路径,每条路径有一个困难值,这个值越大表示越难走. 现在有$Q$组询问,每组询问询问从点$v$开始只经过困难值小于等于$x$的路径所能到达的山峰中第$k$高的山峰,如果…
[IOI2018] werewolf 狼人 LG传送门 kruskal重构树好题. 日常安利博客文章 这题需要搞两棵重构树出来,这两棵重构树和我们平时见过的重构树有点不同(据说叫做点权重构树?),根据经过我们简化的建树方法,这两棵树不再是二叉树,但是仍具有kruskal重构树的优秀性质,建议结合后面的描述理解. 看这题需要首先我们从\(S\)走到\(T\)转化为分别从\(S\)和\(T\)出发寻找能共同到达的点,需要快速求出从某个点出发经过点权不大(小)于\(r\)(\(l\))的点,考虑kru…
题意: 当你是人形的时候你只能走 \([L,N-1]\) 的编号的点(即大于等于L的点) 当你是狼形的时候你只能走 \([1,R]\) 的编号的点(即小于等于R的点) 然后问题转化成人形和狼形能到的点有没有交集. solution: 发现可以建 kruskal重构树,就可以通过在树上倍增来求出来一个子树,这个子树内是你可以到的点.然后问题转化成了两个子树区间的交,这个问题可以用主席树解决. 定义 \(rev1_i\) 是在树上的第 \(i\) 个位置对应的数,那你定义 \(r_{rev1_i}=…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ407.html 题解 套路啊. 先按照两个节点顺序各搞一个kruskal重构树,然后问题转化成两棵kruskal重构树,不断询问,每次询问让你判断是否有点同时存在于 第一棵树的一个子树 和 第二棵树的一个子树中. 这个东西就转成dfs序之后主席树搞一搞就好了. 代码 #include <bits/stdc++.h> #include "werewolf.h" #define clr…
LOJ 洛谷 这题不就是Peaks(加强版)或者归程么..这算是\(IOI2018\)撞上\(NOI2018\)的题了? \(Kruskal\)重构树(具体是所有点按从小到大/从大到小的顺序,依次加入这些点的边),我们可以得到两棵树(和那两题不一样的是这题的权值在点上,不需要新建节点). 对于询问\((S,T,L,R)\),可以倍增找出\(S,T\)可以在哪棵子树中随便走. 那么只需要判断两棵子树是否有交就可以惹. 注意到子树的DFS序是连续的,我们可以在第一个子树的某个数据结构上,查第二个子树…
3545: [ONTAK2010]Peaks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1202  Solved: 321[Submit][Status][Discuss] Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如…
3551: [ONTAK2010]Peaks加强版 题意:带权图,多组询问与一个点通过边权\(\le lim\)的边连通的点中点权k大值,强制在线 PoPoQQQ大爷题解传送门 说一下感受: 容易发现一定选最小生成树上的边,然后用到了一个神奇的东西 Kruskal重构树 进行Kruskal过程中,每条边用一个点代替,左右儿子分别是连的两个点的当前的父亲 这样就形成了一棵树,叶子都是原图上的点,其他都是原图上的边 深度越小的点对应的边权值越大 两点路径上的权值不变 这样的话,与一个点通过权值\(\…
强制在线 kruskal重构树,每两点间的最大边权即为其lca的点权. 倍增找,dfs序对应区间搞主席树 #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #define N 100005 #define M 500005 using namespace std; int l[2*N],r[2*N],cnt,num_c…
题目链接: IOI2018werewolf 题目大意:给出一张$n$个点$m$条边的无向图,点和边可重复经过,一个狼人初始为人形,有$q$次询问,每次询问要求人形态只能处于编号不小于$L$的点,狼形态只能处于编号不大于$R$的点,询问能否从$S$处于人形态然后在编号在$[L,R]$内的点变身一次成为狼人然后到达 $E$. 题目中编号都是从0开始,太不舒服了,我们按编号从1开始讲QAQ. 题目大意就是询问每次从一个点开始走只能走编号在[l,n]中的点,在任意点变成狼,之后只能走[0,r]中的点,是…