并查集
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
ccpc网络赛 Jumping Monkey 逆向并查集,重构树技巧
题意:树上所有点有点权,询问每个点,问对于每个i来说有多少v来说,在i到v的路径上v为最大点权 n<=1e5n<=1e5n<=1e5思路:考虑逆向,把树上的点按照点权从小到大排序,那么我们可以发现,当前遍历的这个点对和当前他联通的所有点有贡献,那么我当时有疑问的是怎么把这个贡献加上去,这样挨个遍历会T,有个很牛逼的重构树的思想,该新节点向当前这个集合的最大值的id连边,然后重新在新图上跑一遍,然后统计所有点的深度就行了。ac代码:#include<bits/stdc++.h原创 2021-10-13 13:48:29 · 239 阅读 · 0 评论 -
CF1131F Asya And Kittens并查集,暴力,新颖建图思维
题意:要求给出一个排列,给定n,有n-1对x,y要求每次x和y相邻,并且要保证他俩没有合并,并且将他俩所在的联通块合并。输出一种方案即可,n<=2e5n<=2e5n<=2e5思路:看到了一个比较新颖的做法,类似克鲁斯卡尔重构树,每次合并两个点,新开一个点,然后用并查集去维护,把这两个点的根和点连边,维护并查集数组,然后求前序遍历就可以了。看上去好像挺对,因为每个联通块是独立的,我们每一次合并就是维护了他俩之间的顺序,也不影响他们内部的顺序#include<bits/stdc+原创 2021-10-04 21:41:48 · 192 阅读 · 0 评论 -
可持久化并查集模板
Link//#pragma GCC target("avx")//#pragma GCC optimize(2)//#pragma GCC optimize(3)//#pragma GCC optimize("Ofast")// created by myq#include<iostream>#include<cstdlib>#include<string>#include<cstring>#include<cstdio>#i原创 2021-09-17 11:01:40 · 205 阅读 · 0 评论 -
牛客练习赛88 D都市的柏油路太硬
题意:给定一个图,每两个点之间的距离是他们所有路径中最大值的最小值,求这样的图的最小生成树。有q次询问,求该生成树的a,b之间的最大值。n<=1e5 m<=5e5 q<=1e7思路:是一颗克鲁斯卡尔重构树,求lca,倍增过不去,要么就树剖要么就欧拉序,这里讲一下欧拉序,欧拉序就是遍历一次把他该点存进遍历序列里,dfs遍历的伪代码大概是这样void dfs(int u,int fa){ id[++cnt]=u; in[u]=cnt; dep[u]=dep[fa]+1; for原创 2021-09-16 00:02:33 · 229 阅读 · 0 评论 -
并查集(专题)
解题报告:看似像博弈论的问题,其实就是在询问当两个点在一个集合了就结束游戏了,并查集处理就行了。#include<iostream>using namespace std;const int N=210,M=N*N;int p[M];int n,m;int get(int x,int y){ return x*n+y;}int find(int x){ if(p[x]!=x) p[x]=find(p[x]); return p[x];}.原创 2020-05-11 21:21:30 · 267 阅读 · 0 评论 -
种类并查集
poj-2492BackgroundProfessor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the oppos...原创 2020-03-18 16:50:40 · 248 阅读 · 0 评论 -
并查集 反向记录时间
问题 1435: [蓝桥杯][历届试题]国王的烦恼时间限制: 1Sec 内存限制: 128MB 提交: 810 解决: 217题目描述C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座小...原创 2020-03-06 11:33:39 · 245 阅读 · 0 评论 -
并查集
题目点这里#include<iostream>#include<algorithm>#include<vector>#include<map>using namespace std;const int N=200010;int p[N];int c[N];int num[N];vector<int>v[N];int ...原创 2020-02-11 16:54:49 · 215 阅读 · 0 评论 -
食物链(并查集)
题目在这里AC代码:#include<iostream>#include<string.h>#include<algorithm>using namespace std;const int N=100010;int d[N],p[N];int find(int x){ if(x!=p[x]) { int t=...原创 2020-02-09 22:19:35 · 222 阅读 · 0 评论 -
并查集(求连通块数量)
给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:“C a b”,在点a和点b之间连一条边,a和b可能相等;“Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等;“Q2 a”,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“C a b”,“Q1 a b”或“Q2 a”中...原创 2020-02-09 18:24:50 · 1260 阅读 · 0 评论 -
并查集模板
题目链接:题目点这里#include<iostream>#include<string.h>#include<algorithm>using namespace std;const int N=100010;int p[N];int find(int x){ if(x!=p[x]) { p[x]=find(p[...原创 2020-02-09 18:08:23 · 193 阅读 · 0 评论 -
并查集复习进阶版
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the n...原创 2020-01-22 22:46:46 · 257 阅读 · 0 评论