
并查集
文章平均质量分 81
cillyb
这个作者很懒,什么都没留下…
展开
-
QDUOJ - kkun的膜神帮
https://qduoj.com/problem/95/kkun的膜神帮发布时间: 2016年7月2日 20:30 最后更新: 2016年7月2日 20:33 时间限制: 1000ms 内存限制: 128M描述强大的kkun神当然会有一大群膜拜他的粉丝,但是这些粉丝确喜欢kkun的不同部分,例如他帅气的脸庞,比光还快的手速,无敌的智慧等等。原创 2016-07-02 22:04:50 · 1933 阅读 · 0 评论 -
HDU 5441 Travel (并查集 离线处理)
题意:给你n个点,m条带权边,现在q次询问,每次询问给你一个val,让你求有多少对点能相连且路径上最大权不能超过val。(ab和ba算两对)(n思路:把每条边按权值从小到大排序,按每次询问val值从小到大排序,枚举询问时,不断加上求得每次加一条边后新产生的点对。用一个数组num[i],来记录i这个联通块的点的数量。每次两个联通块相连,新增加的点对数为num[a]*num[b原创 2017-07-23 23:45:57 · 453 阅读 · 0 评论 -
CodeForces 593D Happy Tree Party(树链剖分(边权) or LCA+并查集)
题意:给你一棵数,n个点n-1条边,每条边有个权值,q次询问,询问有两种:1 a b y : a到b的路径上不断进行y = y/xi(像下取整),问最后y的值2 p c : 将第p条边的权值改为c,c一定比原来这条边的值小思路:树剖:线段树记录区间的乘积,查询的时候当两者重链的top相等的时候注意去掉top点的权值。每条边的权值都是在1e18内,所以如果线段树某个元素原创 2017-08-09 01:32:40 · 669 阅读 · 0 评论 -
CodeForces 292D Connected Components(并查集 前后缀)
题意:给你n个点,m条边,现在q次询问,每次询问给你一个l, r, 问你删除第l至r条边后,连通块的数量。(每次询问之后又把所有边加上) n 思路:想着暴力或是对询问区间进行排序再去操作,复杂度都很高,显然不行。每次询问是把一段区间的边删去,所以我们可以预处理出 1~i 和 j~m 条边构成的并查集,这样空间复杂度1e4*100,可以满足,每次询问,合并一下1~l-1和r+原创 2017-08-09 17:04:09 · 529 阅读 · 0 评论 -
HDU 4427 Conquer a New Region(思维 并查集)
题意:给你n个点,n-1条带权无向边(一棵树),定义两点之间的承载能力是他们之间路径上的最小承载能力。找出一点,使得其余n-1个点到该点的承载能力之和最大。思路:因为a和b之间的承载能力是它们之间承载量的最小值,所以先将边按承载量从大到小排序。每次合并A,B两个集合时,它们之间的承载量为当前最小,假如A合并到B,则和为sum[A]+cnt[B]*w, B合并到A为sum[B]+原创 2017-07-26 13:51:52 · 423 阅读 · 0 评论 -
uva 11987 Almost Union-Find(并查集的删除操作)
题意和思路就引用kk(@儿子)的吧:题意:初始时,一共有n个元素的组合1,2,3....n给出三个操作1 p q:合并p,q所在的集合2 p q:把p移动到q所在的集合3 p:输出p所在的集合的元素的个数思路:1,3相当简单,赤裸裸的并查集就好了 麻烦的是2,并查集是单向的,只知道父亲不知道儿子 所有如果i是叶子节点无所谓原创 2016-10-09 11:32:12 · 481 阅读 · 0 评论 -
BZOJ 3637 可持久化并查集 by zky
题意:n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出00思路:裸的可持久化并查集。我们知道普通的并查集就是一个pre数组,现在需要可持久化,维护历史版本的pre数组。和主席树是有相通之处的,都是每个节点维护了一棵线段树,然后每次修改只会修改到原创 2017-10-08 16:19:40 · 444 阅读 · 0 评论 -
codevs 1069 关押罪犯 (并查集)
题意:有n名罪犯,m个关系,每个关系(u, v, w)表示犯人u和v如果关在同一个监狱之间会产生怨气值w,现在有两个监狱,问你怎么放置着n个犯人,犯人之间最大怨气值最小,求这个值。N≤ 20000,M≤ 100000思路:(点击打开链接)维护罪犯在哪一个监狱不方便,我们可以维护某两个罪犯是不是在一个监狱。考虑到并查集的本职工作是维护某两点在一个集合,不能很好地处理不在一个集合的情况,通原创 2017-09-22 19:46:07 · 660 阅读 · 0 评论 -
51nod 1204 Parity(并查集)
题意:你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串(例如其中的第3到第5个数字)问他,该子串中包含了奇数个还是偶数个1,他会回答你的问题,然后你可以继续提问......你怀疑朋友的答案可能有错,或说同他之前的答案相互矛盾,例如:1 - 2 奇数,3 - 4 奇数,那么可以确定1 - 4 一定是偶数,如果你的朋友回答是奇数,就产生了矛盾。给出所有你朋友的答案,请你找出第一个原创 2017-10-25 22:29:40 · 492 阅读 · 0 评论 -
CodeForces 566 D.Restructuring Company(并查集)
题意:有n个人,一开始每个人都属于自己部门。现在q次询问,询问有三种:1 x y : 将x所在的部门和y所在的部门合并2 x y : 将x, x+1, ....y-1, y的所有人所在部门合并3 x y : 问x和y是否在同一个部门 (1 ≤ n ≤ 200 000, 1 ≤ q ≤ 500 000)思路:1 3操作好做,关键是2操作,需要将一串的都合并。暴力的话n原创 2017-07-12 00:30:57 · 2055 阅读 · 0 评论 -
Codeforces Round #218 (Div. 2) D. Vessels(思维 并查集)
题意:从上到下有n个杯子,编号从1到n。每个杯子有一定体积v[i]. 两种操作:1 x y, 向x水杯倒y水; 2 x, 询问x水杯有多少水. (水杯水溢出会往下流)n,q 思路:暴力倒水的话是n*q,很多次要经过满的水杯,很费时,可以用并查集维护每个水杯往下的第一个非满的水杯。代码:#include#include#include#includeusing nam原创 2017-07-10 22:41:49 · 429 阅读 · 0 评论 -
L2-010. 排座位(并查集水题)
L2-010. 排座位时间限制150 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,原创 2016-06-19 10:10:01 · 1571 阅读 · 0 评论 -
并查集算法总结
这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告转载 2016-06-18 20:59:16 · 635 阅读 · 0 评论 -
HDU - 1232 畅通工程(并查集水题)
畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 44798 Accepted Submission(s): 23766Problem Description某省调查城镇交通状况,得到现有城镇道路原创 2016-06-18 23:07:23 · 470 阅读 · 0 评论 -
poj 1703 Find them, Catch them (种类并查集)
看了半天才差不多有点看明白了关系的更新。一下摘自博客:点击打开链接 一道标准的关系型并查集题。普通的并查集是给几个同类的元素,而关系型并查集是给不同类的元素,然后求各个元素之间的关系。 题目大意是:在一个城市里有两种不同的犯罪团伙。首先输入T表示有T组测试,然后输入N和M,表示有N个罪犯(编号从1到N)而且接下来有M个操作。操作分为两种:原创 2016-12-07 17:51:38 · 600 阅读 · 0 评论 -
hdoj 1272 小希的迷宫(并查集)
题意:意思就是问你是不是一棵树思路:1.合并时任何两个点的父亲不能相同2.最后所有点的父亲都相同注意:直接输入0 0应该输出Yes#include#include#includeusing namespace std;const int maxn = 1e5+5;int pre[maxn];bool vis[maxn];int Find(int x){原创 2017-01-15 17:37:46 · 473 阅读 · 0 评论 -
蓝桥杯 国王的烦恼(并查集)
题目地址:点击打开链接思路:按照天数倒着建图,如果这桥连了两个新区域并且和上一次连新区域不是同一天,ans++。#include#include#include#includeusing namespace std;const int maxn = 1e5+5;int n, m, pre[maxn];struct node{ int u, v, d;原创 2017-02-24 13:15:15 · 678 阅读 · 0 评论 -
HDU 4786 Fibonacci Tree (最小生成树变形)
题目地址:点击打开链接题意:n个点,m条边,无向图,边有两种,一种价值为1,一种价值为0,问你组成的生成树的价值是否可能是一个素数。思路:对边按价值进行排序,然后按价值从小到大和从打大到小分别求一次生成树,得到一个maxval和minval,只要看下minval到maxval之间有没有素数就可以了。因为这个范围内的值都可以换边进行得到。最小生原创 2017-03-21 15:21:03 · 557 阅读 · 0 评论 -
Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary(带权并查集)
D. Mahmoud and a Dictionarytime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMahmoud wants to write a new di原创 2017-03-28 23:53:10 · 398 阅读 · 0 评论 -
hdoj 2818 Building Block(加权并查集)
Building BlockTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4856 Accepted Submission(s): 1505Problem DescriptionJohn are playing with b原创 2016-07-22 20:10:12 · 519 阅读 · 0 评论 -
PAT 1107. Social Clusters (30)(并查集)
题意:给你n个人,每个人都有一些兴趣,有相同兴趣的人会在一起,问最后会形成几个人群。思路:并查集裸题,可以用一个vector来记录下每个兴趣有哪些人喜欢,这样读到某个人的某个兴趣时,可以直接把这个人和这个兴趣存的人都关联起来。(最后记得要1到n都运行下Find,把每个人指向自己所在集合的祖先)代码:#include<iostream>#include<cstdio>#i...原创 2018-03-12 15:38:40 · 340 阅读 · 0 评论