并查集
CoderCat.
大
展开
-
poj1182食物链_带权并查集
题目大意:有三类动物,A, B, C。A吃B,B吃C,C吃A。现在有n个动物(属于以上三类), m个陈述:d u v, d==1表示u和v为同类,d==2表示u吃v。 三种情况当前的话为假话 (1)当前的话与前面的话冲突 (2)当前的话中u或者v大于n (3)当前的话表示u吃u 问假话的数量 fa[i]表示i的父亲的编号 relation[i]表示i与其父亲的关系:0表示相同,1表...原创 2018-05-19 20:32:27 · 104 阅读 · 0 评论 -
hdu1811_并查集+拓扑排序
题目大意:有n个点(编号0~n-1),有m个关系,“>”、“<”或者“=”。若这n个点能形成固定的链式大小关系,就输出”OK”,如果关系有冲突,则输出”CONFLICT”,如果关系不全,则输出”UNCERTAIN”。PS:坑点,”CONFLICT”优先于”UNCERTAIN”,所以判断到”UNCERTAIN”条件时,别急着输出”UNCERTAIN”,而是置一个”UNCERTAIN”的f...原创 2018-06-21 21:47:19 · 253 阅读 · 0 评论 -
hdu2473_并查集删点技巧
题目大意:给n个点,编号0~n-1,m个操作。有 两种操作类型, <1>M u v:将u和v加入到一个集合中。 <2>S u:将u从他原先所在的集合中删除。 问经过m次操作后,该n个点能形成几个集合。 初始化时将点i置一个虚拟父节点i + n,删除i点时,再将i的父节点置一个不同的虚点。 #include <iostream> #include &l...原创 2018-06-22 12:12:01 · 236 阅读 · 0 评论 -
CodeForces - 566D 并查集区间更新优化
题目大意:给定n个人,q个询问。初始状态下,1~n个人独立。接下来q行,每行3个数字type(1,2,3), a, b。如果type==1,则将a和b并在一个集合;如果type==2则将a~b个人并在一个集合;如果type==3,若a和b在一个集合则输出YES,反之输出NO 操作2:并查集区间合并优化。 nxt[i]:i的后面第一个不和i在同一集合的元素所在的集合(初始化为i+1)。每次区间(...原创 2018-08-04 17:22:07 · 335 阅读 · 0 评论 -
CodeForces - 722C_Destroying Array 并查集应用
题目大意:给定数组大小n,再给定数组元素(从1~n编号),最后给定数组元素的删除顺序,求执行完每一次删除操作后,数组的最大连续子段和。 倒着处理,并查集。 (1)初始化数组为空,倒着加入元素。 (2)每一次加入元素,如果其左右两边也加入过了,就与左或者右边并在一起得到新的数值。当前答案来源于上一次的答案或者本次更新的数值,将两者取最大值即可。 //并查集,倒着处理 #include &...原创 2018-08-05 12:17:44 · 136 阅读 · 0 评论 -
(水题)并查集求连通块hdu1198
#include <cstdio> #include <cstring> using namespace std; bool grad[11][4] = {{1,1,0,0}, {1,0,0,1}, {0,1,1,0}, {0,0,1,1},//i = 0表示上,顺时针编号;j = 1表示连通 {1,0,1,0}, {0,1,0...原创 2018-04-02 22:13:18 · 189 阅读 · 0 评论 -
poj2492 带权并查集 三种解法
题意:给定n个昆虫和m个判断x, y,表示x和y是异性。求判断是否错误。 法一:带权并查集 #include <cstdio> using namespace std; const int N = 2010; int fa[N],relation[N];//0:相同,1不同 int n, m; int findf(int x) { if(x != fa[x]) ...原创 2018-09-02 11:27:52 · 293 阅读 · 1 评论