https://www.luogu.org/problemnew/show/P4997 首先是改变气的定义,使得容易计算,这个很好理解. 然后使用并查集,因为要维护整个连通块的性质. 最后的难点在于,落子把同颜色的连通块连接了,但假如本身就是同一个连通块则不应该计数,所以其实连通块的气不应该手动维护,而应该全权交给并查集去处理. 当然去重之后也是对的. #include<bits/stdc++.h> using namespace std; typedef unsigned long long…
题目:bzoj3673:https://www.lydsy.com/JudgeOnline/problem.php?id=3673 bzoj3674:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 洛谷P3402:https://www.luogu.org/problemnew/show/P3402 可持久化并查集!就是用主席树模拟并查集,真美! 路径压缩版:和并查集的相似之处想想感觉好妙: 但复杂度似乎有点不科学,bzoj 的两道题都…
题目:https://www.luogu.org/problemnew/show/P3295 当要连的边形如 “一段区间内都是 i 向 i+L 连边” 的时候,用并查集优化连边. 在连边的时候,如果要连的区间已经有一部分连成这个样子了,就希望跳过这一段. 想倍增那样跳过已经连好的部分.用并查集实现. 建 logn 个并查集,第 i 个并查集里 x 和 y 连通表示 \( [x,x+2^i-1] \) 和 \( [y,y+2^i-1] \) 已经连成了的样子. 那么要连 \( [l1,r1] \)…
正解:并查集 解题报告: 传送门(咕了! 其实没有很难(虽然我是交了三发才过的QAQ 但是一来好久没打并查集了恢复一下智力 二来看着智推里唯一一个蓝就很不爽(,,,虽然做了这题之后又补上了个蓝题QAQ 所以就做了下QwQ 这题,大概难点在分类讨论?(划 反正整个儿就并查集板子题了 说难点在分类讨论主要是因为,一般这种都是分成两组嘛,就很简单fa[x]=y fa[x+n]=y+n差不多这意思嘛 但是这个是分成三组,,,所以打起来就要注意一下理清条理,最好注释下什么东西是干什么的,这样打起来其实还是…
题目传送门 星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或间接地连接. 但好景不长,很快帝国又重新造出了他的超级武器.凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球.由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来. 现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击…
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1551 思路: 很显然地我们会发现,这是一道并查集的模板题,并且是考察了并查集中的”并“和”查“的操作(好像所有关于亲戚的题都与并查集有关... 然后就是一个并查集的模板了,可以尝试记住(亏自己先会了最小生成树... AC代码: #include<cstdio> #include<iostream> using namespace std; ]; int a, b, c, d; in…
看了他们的题解感觉很震惊,为什么要用kruskal,这题要用到最小生成树吗??? 38行短短的程序就可以了,我觉得学习不是一种套用,套自己学的,而且题解很大一部分都是kruskal. 个人认为自己的程序比他们快. #include<bits/stdc++.h> using namespace std; struct node{ int x,y,z; }q[]; ],num[]; int n,m; bool f; int w_comp(const node a,const node b){ re…
题目:https://www.luogu.org/problemnew/show/P1525 并查集+贪心,从大到小排序,将二人分在不同房间,找到第一个不满足的即为答案. 代码如下: #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,m,fa[20005],ans,ct,d[20005]; struct N{ int hd,to,w; }edge[1000…
https://www.luogu.org/problemnew/show/P5429 很明显是要维护整个连通块的共同性质,并查集一搞就完事了. #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=100000; int par[MAXN+5]; int u[MAXN+5],d[MAXN+5],l[MAXN+5],r[MAXN+5]; void init(int n) { for(i…
https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会减1. 还有一个bug就是假如没有到达连通分支为1,不应该输出maxt而是要输出-1.所以应该是在cnt==1的情况再更新maxt并break才对. #include<bits/stdc++.h> using namespace std; #define ll long long int n,m;…