并查集是常见而且好用的一种数据结构。原因在于代码简练而且方便维护各种额外信息。带权并查集就是并查集的一种应用方式。原理其实就是普通并查集额外维护了一个结点的权数组。 例题: 本题的关系有三层 -> a -> b -> c -> ,但不同的是本题的关系是有向的,也就是说a和b如果是敌对关系,那么b和a ...
分类:
其他好文 时间:
2020-02-08 16:01:11
阅读次数:
248
不知道说些啥 #include<bits/stdc++.h> using namespace std; const int N=500010; int f[N]; int dep[N],siz[N]; int n,m; int F(int x){//递归版路径压缩 if(f[x]==x)return ...
分类:
其他好文 时间:
2020-02-07 18:45:01
阅读次数:
54
大意: 给定长$n$的01串$s$, 给定$k$个集合$A_1,...,A_k$,保证任意三个集合交集为空. 每次操作选择一个集合,翻转$s$中对应位置. 定义$m_i$为使前$i$个位置全为$1$所需的最少操作数(题目数据保证每个$m_i$都存在), 求所有$m_i$的值. 显然每个位置最多属于两 ...
分类:
其他好文 时间:
2020-02-07 14:30:17
阅读次数:
61
线段树分治 离线分治来解决一类问题,如 "二分图" 二分图显然可以用 扩展域的并查集 来实现,如果在线直接扫一遍的话, 发现边消失时撤销的操作并不是很好做(~~LCT大法吼啊~~),但如果撤销上一步操作就不是很难了, 只需要按秩合并,再搞一个栈来维护操作就行了 线段树分治 就不知道高明到哪里去了, ...
分类:
其他好文 时间:
2020-02-07 01:21:06
阅读次数:
65
一道很好的题了,具体题解可以看b站的讲解。。 拆点的思想有一种2sat的感觉 /* 给定一组开关的集合,每个开关最多被两个集合包含,对集合操作一次则所有集合内的开关状态变化 现在要将前i个开关状态切换到开,问最少要操作几次集合,求出i从1到n的每个答案 一些性质:每个集合要么被操作一次,要么不被操作 ...
分类:
其他好文 时间:
2020-02-06 01:00:54
阅读次数:
72
http://poj.org/problem?id=1182 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所 ...
分类:
其他好文 时间:
2020-02-05 10:08:11
阅读次数:
58
http://poj.org/problem?id=2492 题意: 给出一个T代表几组数据,给出一个n一个m,代表人的编号由1~n,m条命令,每条命令由两个数值组成,代表这两个人性别不同,问所有命令是否符合逻辑 两种写法: 第一种:带权并查集 1 #include <stdio.h> 2 #inc ...
分类:
其他好文 时间:
2020-02-05 09:29:14
阅读次数:
59
在并查集(不相交集)中附加操作$Deunion$,它实现的功能是取消最后一次$Union$的操作。 实现思想 初始化一个空栈,将每一次的$Union$操作的两个集合的根和其值$Push$入栈;若执行$Deunion$操作时,只需要对栈进行$Pop$操作即可。在没有 路径压缩 时,这个策略是有效的;若 ...
分类:
其他好文 时间:
2020-02-04 15:52:42
阅读次数:
88
输入样例 1:5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5S 输出样例 1:nonoyesThere are 2 components. 输入样例 2:5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5I 1 3C 1 5S 输出样例 2:nonoyesyesThe n ...
分类:
其他好文 时间:
2020-02-04 15:44:45
阅读次数:
131
http://poj.org/problem?id=1308 Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more ...
分类:
其他好文 时间:
2020-02-04 11:11:57
阅读次数:
84