
并查集
Bahuia
软件工程博士
展开
-
51Nod - 1821 思维题 + 并查集 + 二分
题意:一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i。给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求选择一个S2的子集S3(|S3|(集合元素可以重复)Input第一行一个数n,(n<=1000)接下来n行,每行描述一个集合:第一个数m,表示集合原创 2017-03-08 16:43:24 · 540 阅读 · 0 评论 -
hihocoder - 1487 并查集
题意:中文题。思路:并查集,周长变化可以算出来。代码:#include using namespace std;const int MAXN = 1111111;int pa[MAXN];int Find(int x) { return x == pa[x] ? x : pa[x] = Find(pa[x]);}const int dx[] = {0,原创 2017-03-28 11:02:21 · 394 阅读 · 0 评论 -
HDU 6136 贪心+优先队列+并查集优化
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6136 一个长度为L的环形赛道上有n辆赛车,每个赛车有一个初始位置和一个顺时针或逆时针的速度,第i个赛车重量为i,当两个赛车相遇之后重量小的会被毁掉,重量大将状态不变,继续前进,问经过多长时间之后,只剩下一辆车。思路:贪心,可以想到一个明显的结论,所有车里最先相撞的一定是某两个相邻的赛车,那么可以原创 2017-08-20 22:11:16 · 517 阅读 · 0 评论 -
UVA 11987 并查集(虚拟节点)
题意:题目链接:https://vjudge.net/problem/UVA-11987 对集合三种操作,一种合并,一种求集合元素个数和总和,另一种是将其中一个集合的元素移动到另一个集合,输出询问个数和总和。思路:并查集,主要是转移这个操作,如果单纯将pa[x]=Find(y),那么以x为祖先的结点都会被转移,因此这里需要为每个集合设置虚拟节点,所有集合的根一定都是虚拟节点,所有操作也都针对虚拟节原创 2017-10-10 17:27:46 · 604 阅读 · 0 评论 -
HDU 5361 最短路+并查集优化
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5361 有n个点,每个点有一个可以到达点的范围[l,r],传送一次距离为c,问从点1到所有点的最短距离是多少。思路:注意到从点1开始,如果利用优先队列选出将要到达的最近的点,那么每个点最多只需要更新一次,如果用传统的最短路,会浪费大量的时间在扫描那些已经更新过的点上,因此需要利用并查集原创 2017-10-11 15:29:14 · 784 阅读 · 0 评论