题目描述 给你一个\(n\)个点\(m\)条边图,\(q\)个询问,每次问你边权在\([l,r]\)之间的边组成的最小生成树(森林)的边权和.强制在线. \(n,m,q\leq 100000\) 题解 考虑离线做法.从大到小加边,用LCT维护当前的最小生成树.维护一棵线段树,第\(i\)个位置表示当前的最小生成树中边权为\(i\)的边的权值和.当一条边被加入时就在对应位置加上边权,删掉时就减掉边权.假设已经处理了边权\(\geq i\)的所有边,那么对于所有\(l=i\)的询问的答案就是线段树中…
题目描述 N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. 输入 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密.接下来M行,代表图中的每条边.接下来K行,每行两个整数L.R代表一组询问.对于type=0的测试点,读入的L和R即为询问的L.R:对于type=1的测试点,每组询问的L.R应为L xor lastans和R xor lastans. 输出 K行每行一个整数代表该组询问的联通块个数. 样例输入 3 5 4 0 1 3 1 2 2…
题目大意: N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. 题解: 这道题考试的时候没想出来 于是便爆炸了 结果今天下午拿出昨天准备的题表准备做题的时候 题表里就有这题.. 欲哭无泪啊有木有... ... 说正经的 假设我们可以做到用并查集实现区间减法 那么很显然的做法就是维护前缀并查集然后做差 但是并查集并不满足区间减法. 但是我们可以考虑一下如果并查集满足区间减法,那我们会拿它做什么 我们对并查集做差实际上就是想使并查集\([1,R]\)退回到删除掉\([1,…
自己独自想出来并切掉还是很开心的~ Code: #include <bits/stdc++.h> #define N 400005 #define inf 1000000000 #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout) using namespace std; int rt[N]; struct Edge { i…
Problem Lights (HDU 5820) 题目大意 在一个大小为50000*50000的矩形中,有n个路灯.(n<=500000) 询问是否每一对路灯之间存在一条道路,使得长度为|x1 – x2| + |y1 – y2|且每个拐弯点都是路灯. 解题分析 官方题解: 除了从左往右扫描一遍外,个人认为还需从右往左扫描一遍,记录右上方的点的信息. 实际实现时,只需将整个图左右对称翻转一下即可. 学习了一下可持久化线段树的正确姿势. 可持久化线段树的空间一定要开大,开大,开大. 下图为模拟的小…
[BZOJ4704]旅行 Description 在Berland,有n个城堡.每个城堡恰好属于一个领主.不同的城堡属于不同的领主.在所有领主中有一个是国王,其他的每个领主都直接隶属于另一位领主,并且间接隶属于国王.一位领主可以拥有任意数量的下属.这些城堡被一些双向的道路连接.两个城堡是连接的当且仅当他们的主人中一位直接隶属于另一位.每一年,在Berland会发生以下两件事中的一件:1.野蛮人攻击了城堡c.这是城堡c第一次也会是最后一次被攻击,因为野蛮人从来不攻击同一座城堡超过一次.2.一个骑士…
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 ApAp 增加 xx. Q v l r:对于版本v的序列,询问 A[l,r]A[l,r] 的区间和. C v:拷贝一份版本v的序列,编号为当前版本总数+1. 版本号从 11 开始:版本 11 的序列,所有元素均为 00. 格式 输入格式 第一行,两个正整数 n,mn,m,表示序列的长度和操作个数. 接…
3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status][Discuss] Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2*10^4 Input Output Sample Input 5 6…
2653: middle Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1298  Solved: 734[Submit][Status][Discuss] Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数. 其中a<b<c<d. 位置…
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; typedef long long ll; #define lson l,m,ls[rt] #define rson m+1,r,rs[r…