题目 CF576E 分析: 从前天早上肝到明天早上qwq其实颓了一上午MC ,自己瞎yy然后1A,写篇博客庆祝一下. 首先做这题之前推荐一道很相似的题:[BZOJ4025]二分图(可撤销并查集+线段树分治) 大力每个颜色维护一个并查集,就很像上面那道题了.但是存在一个问题:在处理线段树区间\([l,r]\)时,可能并不知道\(l\)处的修改是否成功,所以不知道\(l\)处修改的边具体是什么颜色的. 我的解决方案是:处理区间\([l,r]\)时忽略\(l\)处修改的边.先向左子树递归,递归到叶子时…
题目: BZOJ4025 分析: 定理:一个图是二分图的充要条件是不存在奇环. 先考虑一个弱化的问题:保证所有边出现的时间段不会交叉,只会包含或相离. 还是不会?再考虑一个更弱化的问题:边只会出现不会消失. 当加边的时候,若\((u,v)\)不连通:一定不会构成奇环,将它加入. 若\((u,v)\)已经联通,则不加入这条边,而是查询\(u\)和\(v\)两点间的距离.若为偶数则加上这条边后会形成奇环.一个奇环不可能分成数个偶环,所以从此以后都不再是二分图.若为奇数则直接忽略这条边,因为如果将来某…
题目传送门(内部题146) 输入格式 从$geography.in$读入数据. 第一行两个数$n,m$,表示有$n$个点,$m$个时刻.接下来$m$行每行三个数,要么是$1\ u\ v$,要么是$2\ u\ v$,分别表示添加一条无向边和删除一条无向边. 输出格式 输出答案到$geography.out$. 共$m$行,每行一个数表示连通块大小乘积$\mod 1,000,000,007$. 样例 样例输入: 5 61 1 31 2 31 1 21 4 51 3 42 3 4 样例输出: 2336…
本题可化成更一般的问题:离线动态图询问连通性 当然可以利用它的特殊性质,采用在线线段树维护一些标记的方法 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C-2条道路. 小人国的交通状况非常槽糕.有的时候由于交通堵塞,两座城市之间的道路会变得不连通,直到拥堵解决,道路才会恢复畅通.初来咋到的你决心毛遂自荐到交通部某…
UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum (浮点数小数点一定是0.5) 查询y = fnum这条直线穿过了多少个州和city.州指的是连通的城市. 解题思路:用并查集记录城市之间是否连通,还有每一个州的y的上下界.建立坐标y的线段树,然后每次运行road操作的时候,对范围内的y坐标进行更新:更新须要分三种情况:两个州是相离,还是相交,还是包…
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11987 并查集+线段树进行修改与统计 https://vjudge.net/problem/UVALive-4730 线段树 https://vjudge.net/problem/UVALive-4108 暴力 线段树 https://vjudge.net/problem/UVA-12299 树状数…
思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...) //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; ],v[N*],tot,deep[N],num[N],f[N],fa[N][]; long long ans; int lca(int x,int y)…
题目描述 一个人有很多的影子,新的旧的,他们不断消失重来.学者的影子在他苍白色的精神图景里成为了$n$个黑色的点,他们伸长的触手交叉形成了一颗黑色的树.假使每个影子点拥有一个权值$d_i$,黑色的树边也有一个权值$w_i$,对于一条黑色树的路径,令路径上所有影子点权值$d_i$的最小值为${min}_d$,路径上所有树边权值$w_i$的总和为$sum_w$,则该条路径的总权值为${min}_d\times sum_w$.路径的起点和终点可以是黑色树中的任意影子点,且路径中不能出现重复的影子点.现…
T1 联 考试两个小时终于调过了,话说一个傻逼错最后还是静态查出错的..... 大概维护两个懒标记,一个区间覆盖,一个区间异或,然后保证每个区间只会存在一种懒标记. 然后维护区间0的个数,查询时查询那边有零即可. 一般板子题确定思路正确,不如静态查错 T2 赛 考场打的50分暴力 其实70分做法很简单,枚举两人都喜欢的个数为r,A喜欢的还要选A-k,B选B-k,然后再选出剩下的,贪心选就行 正解是线段树,然而我没打,三分错解,但水过了. T3 题 神仙DPbitset优化 f[i][S]表示i点…
题目大意: 在$n$个带权点上维护两个操作: 1)在点$u,v$间连一条边: 2)询问点$u$所在联通块中权值第$k$小的点的编号,若该联通块中的点的数目小于$k$,则输出$-1$: 传送门 上周的模拟赛在一道线段树合并的题目上gg了,来学习一个. 对每一个联通块,我们维护一棵权值线段树.查询时,若左子树大小大于等于$k$进入左子树,否则进入右子树: 因为每棵线段树同构,所以对于任意两棵线段树可以进行合并操作: int merge(int x,int y){ if(!x)return y; if…
题目传送门 题意:训练指南P248 分析:第一个操作可以用并查集实现,保存某集合的最小高度和最大高度以及城市个数.运用线段树成端更新来统计一个区间高度的个数,此时高度需要离散化.这题两种数据结构一起使用,联系紧密. #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; const int M = 3 * N; const int INF = 0x3f3f3f3f; struct Point { int x, y…
题目描述     LYK在玩猜数字游戏.    总共有n个互不相同的正整数,LYK每次猜一段区间的最小值.形如[li,ri]这段区间的数字的最小值一定等于xi.     我们总能构造出一种方案使得LYK满意.直到-- LYK自己猜的就是矛盾的!     例如LYK猜[1,3]的最小值是2,[1,4]的最小值是3,这显然就是矛盾的.     你需要告诉LYK,它第几次猜数字开始就已经矛盾了.   输入     第一行两个数n和T,表示有n个数字,LYK猜了T次.    接下来T行,每行三个数分别表…
如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x的位置去合并那个并查集,同时维护个数和大小 #pragma GCC optimize(3) #include<bits/stdc++.h> #define pa pair<double,int> #define CLR(a,x) memset(a,x,sizeof(a)) using…
[CF471E]MUH and Lots and Lots of Segments 题意:给你平面上n条水平或竖直的,端点在整点处的线段.你需要去掉一些线段的一些部分,使得剩下的图形:1.连通,2.无环,3.端点依旧位于整点处. $n\le 2\times 10^5$ 题解:如果把整点看成点的话,那么这题让你求的就是一棵生成树.一棵生成树的边数就是这个连通块内点数-1,所以我们找到最大的连通块将其点数-1就是答案. 具体实现中,我们先进行扫描线,用并查集维护连通性,用线段树快速查找区间中点的数量…
Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connected Disconnected Connected Hint N<=100000 M<=200000 K<=100000 题目大意 给出一个有n个节点和m条边的图,然后有k个询问,每个询问是删掉一些边,然后判断图是否连通,询问之间互相独立. 连通性问题通常的做法是并查集,然而并查集不支持删边,但是可以撤销上次操作…
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛.如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连 通的.现在有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥.Q x k 表示询问当前与岛 x连通的所有岛中第 k 重要的是哪座岛,即所有与岛 x 连通的岛中重要度排名第 k 小的岛是哪 座,请你输…
题目大意:有$n$个点,你需要操作$m$次.每次操作为加入/删除一条边. 问你每次操作后,这$n$个点构成的图是否是二分图. 数据范围:$n,m≤10^5$. 此题并没有强制在线,考虑离线做法. 一条边在某个时间被加入,然后又被删除. 设这条边出现的时间为$[l,r]$,我们开一棵线段树,在对应的区间上标记出这一条线段. 最后我们遍历整个线段树,把这些线段往并查集上加,同时维护当前点的颜色,然后简单判断下就没了. 这个并查集需要支持撤销操作,所以不能路径压缩,需要按秩合并 时间复杂度:$O(n\…
用线段树维护每一块左右两侧的并查集, 同色合并时若不连通则连通块数-1, 否则不变 #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #include <set> #include <map> #include <queue> #include <string> #include <string.h&g…
[HNOI2012]永无乡 每个联通块的点集用动态开点线段树维护 并查集维护图 合并时把线段树也合并就好了. #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #define re register #define gc getchar using namespace std; void chread(char &x){ char c=gc(); while(…
这这这这这这什么毒瘤题!!!!!!!!!!!!!!!!!!!!!!!!!!!! 卡LCT(优秀的LCT由于是均摊本身就带着2,3的常数在,而且这道题对于LCT标记十分难维护,又得乘上4,5然后就炸了),卡树剖,卡正解,但是暴力能A!!!!!!!!!!!!!!!!!!!!!! 考试的时候我撸了一发LCT可是.....我忘了rev标记的延迟性会影响到题中所需标记.......我们只有在spaly的时候才会用到pushdown是为了让传上去的东西·真,因为这个pushdown在把信息全部传下去之后也是…
题目链接  2016 ACM-ICPC EC-Final Problem G 题意  给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的边走到$x$的点的集合中,哪一种颜色的点出现的次数最多. 次数相同时输出编号最小的那个颜色.强制在线. 求哪种颜色可以用线段树合并搞定. 关键是这个强制在线. 当每次询问的时候,我们先要求出最小生成树在哪个时刻恰好把边权值不超过$w$的边都用并查集合并了. 在做最小生成树的时候每合并两个节点,另外开…
传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳定...但hzwer都用这种方法水过.. 正解好像是平衡树+启发式合并,以后学TT #include <cstdio> #include <iostream> #define N 100001 int n, m, q, cnt; int a[N], f[N], sum[N * 20],…
我懒死了 过于棘手 但这题真的很水的说 毕竟写啥都能过 常见思路: ①:由于不强制在线,所以重新编号之后线段树维护 ②:用各种可以高速合并的数据结构,比如可并堆,可并平衡树啥的 讲一种无脑算法: 对于$F1$,并查集乱搞 对于$F2$,用可并堆维护连通块里的值,并维护对应的时间,如果堆顶访问到旧的值直接抛出 对于$F3$,用全局堆维护每个连通块的最大值的集合并维护对应的时间,如果堆顶访问到旧的值直接抛出 $A1$:单点修改时在所在可并堆里插入一个新的,维护修改时间,同时在全局堆里插入一个新的该可…
 题意:有T组測试数据.每组数据的N表示有N个城市,接下来的N行里每行给出每一个城市的坐标(0<=x,y<=1000000),然后有M(1<M<200000)个操作,操作有两类,(1)"road A B",表示将城市A和城市B通过一条道路连接,假设A和B原来属于不同的城市群.经过这个操作.A和B就在一个城市群里了.保证每条道路不会和其它道路相交(除了端点A和B).(2)"line C".表示查询当穿过y=C的直线,有多少个城市群.这几个城…
昨天晚上本来想认真打一场的,,结果陪女朋友去了.. 回来之后看了看D,感觉有点思路,结果一直到现在才做出来 首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的边合并,和后一条不被它覆盖的边合并 再用线段树求边的总条数 ps.其实可以直接用并查集合并的思路,每个点往前往后连边,建图然后DFS判环/联通就可以了 #include<bits/stdc++.h> #include<set> using namespace std; #define…
题目链接 给定一张含$n$个点$m$条边的无向图,每个点有一个重要指数$a_i$.有两种操作:1.在$x$和$y$之间连一条边:2.求$x$所在连通块中重要程度第$k$小的点. --------------------------------- 维护第$k$小,很容易想到权值线段树.看到合并二字,可以想到用线段树合并的方法.维护连通块可以用并查集做. 注意并查集合并的方向和线段树合并的方向要一致.查询的时候要先找出并查集的根再查询. 代码: #include<bits/stdc++.h> us…
Codeforces 题目传送门 & 洛谷题目传送门 看到集合的合并,可以本能地想到并查集. 不过这题的操作与传统意义上的并查集不太一样,传统意义上的并查集一般是用来判断连通性的,而此题还需支持赋值.集合内整体加等操作,似乎就有些难处理. 我们不妨考虑此题的弱化版:没有第二类集合的版本.也就是要求支持合并两个集合,集合整体加某个数 \(x\),单点查询三个操作. 很明显集合整体加某个数 \(x\) 就相当于在并查集根节点处打一个 \(+x\) 的标记,查询就暴力跳父亲求出待询问点到根节点路径上所…
题目传送门(内部题116) 输入格式 第一行两个整数$n,m$,如题 第二行有$n$个整数表示$h_1-h_n(1\leqslant h_i\leqslant 10^9)$ 接下来有$m$行,每行两个整数,$p,H_p$,表示第$p$个位置的苹果实际高度为$H_p$. 输出格式 输出共$m$行,每行一个整数,表示这种修改情况下的答案. 样例 样例输入: 5 3 1 2 3 4 4 1 5 5 5 2 3 样例输出: 1 5 3 数据范围与提示 样例解释: 第一种情况 苹果高度为$5\ 2\ 3\…
题目传送门 题目描述 走过奈何桥有一个名叫望乡台的土台,望乡台有个名曰孟婆的老妇人在卖孟婆汤.一生爱恨情仇,一世浮沉得失,都可以随这碗孟婆汤遗忘得干干净净.现在有$n$碗孟婆汤摆成一排,汤的品种不超过$26$种,因此我们用小写字母$a\sim z$来表示一种汤,每碗汤还有一个权值${val}_i$.你需要选出若干碗连续摆放的汤喝下去,这些汤必须满足下列条件:    $\alpha.$至少有一碗汤.    $\beta.$这个子串(也就是那些汤)在原串中的所有子串中的字典序降序排名等于这一段汤的权…
题意:给定N个节点,K次操作,操作有两种,1是合并两个集合,2是求某个集合的第K大(从小到大排序). 思路:合并只要启发式即可.此题可以用线段树,保存1到N的排序的出现次数和. 复杂度O(NlogN).想象一下,当其中一棵树节点少的时候,复杂度是O(logN)的,次数不超过N次:当两棵树的节点都蛮多的时候,复杂度是O(N)的,但是这样的合并能使得集合变得很大,显然这样的合并次数非常少,小于logN次. 所以合并线段树的总复杂度就算O(NlogN),每次询问K大的操作是线段树常规操作,单词复杂度是…