
数据结构--并查集
文章平均质量分 82
focus_best
这个作者很懒,什么都没留下…
展开
-
HDU 4496 D-CITY(并查集)
HDU4496 D-CITY(并查集)题目描述:给出一个有N(0输入:第一行是N和M,然后是M行数(X,Y)(0输出:依次输出所求的连通分量数。分析:当删除前K条边时图所剩的连通分量数就是N个孤立的点只添加后M-K跳边时,所具有的连通分量数。所以仅需倒叙插入每条边,分别保存插入边后有的连通分量数在数组内,然后输出数组即可。AC代码中未加while(scanf("%d%d",原创 2014-01-14 22:53:06 · 1404 阅读 · 0 评论 -
ZOJ 3261 Connections in GalaxyWar(并查集:离线处理)
ZOJ3261 Connections in GalaxyWar(离线处理+并查集)分析:如果有一条边连接两个点,那么将能量小的根连接到能量大的根上.始终保持一个连通分量的根的能量最大.本题还需要预先读入所有数据,进行离线处理.WA了好久,题意理解错误. 如果根不是自己但是根的能量和自己一样,照样不能作为求援对象.AC代码:160ms #include#include#in原创 2014-03-13 13:58:04 · 1181 阅读 · 0 评论 -
HDU 3635 Dragon Balls(并查集:路径压缩)
HDU3635Dragon Balls这里有N个龙珠,每个龙珠初始时都在本身的城市(第i个龙珠在第i个城市),然后要你回答对应的询问。输入:首先是一个T(0T A B(1Q A。你需要输出X,Y,Z。X是A龙珠目前所在的城市,Y是X城市所有的龙珠,Z是A龙珠被转移的次数。输出:回答每条Q命令的X,Y,Z.分析:其实这就是一个并查集的应用,龙珠被转移的次数就是该龙珠距离根节点原创 2014-03-09 17:04:31 · 1487 阅读 · 0 评论 -
POJ 1703 Find them, Catch them(路径压缩并查集)
POJ 1703 Find them, Catchthem(路径压缩并查集)一个城市由N个坏人,他们分别属于两个帮派.且这两个帮派里面最少都有1个人.现在给出如下两种语句:D a b 表示a和b肯定不在一个帮派A a b 你需要回答a和b的关系.输入:首先是一个T (1 输出:回答每条A语句.分析:带路径压缩的并查集:a与其父亲同帮派:v[a]=0a与其父亲不同帮派原创 2014-03-11 20:13:54 · 1249 阅读 · 0 评论 -
POJ 1988 Cube Stacking(路径压缩并查集)
POJ 1988 Cube Stacking(路径压缩并查集)分析:主要就是并查集路径压缩,如果M a b就等于把a所属的连通分量连接到b所属的连通分量上每个节点维护3个变量:其与父节点之间有多少个节点(包括父节点)v,(如果该节点是根节点)还需维护本连通分量一共有多少节点的信息total.由本节点离父节点直接还有多少个节点(初始为0,)可以回答C询问.当进程M操作时候比如M a原创 2014-03-12 10:41:05 · 1206 阅读 · 0 评论 -
POJ 1733 Parity game(路径压缩并查集+离散化)
POJ 1733 Parity game(路径压缩并查集+哈希表)分析:令s[x]表示(F[x],x](如果F[x]>x,则为(x,F[x]] )之间1个数的奇偶性,s[x]=1表奇,s[x]=0表偶.读入u v even(此时u肯定如果a和b在同一个连通分量,那么s[ (a-1,b] ] = s[a]^s[b]如果a和b不在同一个连通分量,那么合并F[a]和F[b],其相对大小无原创 2014-03-12 23:46:06 · 1371 阅读 · 0 评论 -
POJ 1417 True Liars(路径压缩并查集+DP背包问题)
POJ 1417 True Liars(路径压缩并查集+DP背包问题)首先如果A说B yes,那么A与B肯定同类.A说B no,A与B肯定异类.所以读入所有的语句,然后可以把P1+P2个人分成多个连通分量,且每个连通分量有两类人.接下来假设有cnt个连通分量(从0到cnt-1),每个分量要取出一类人,问取完cnt个分量后正好P1个人的方法有多少种?如果只有1种,那么可以区分,否则不能区分.原创 2014-03-14 12:23:01 · 2356 阅读 · 0 评论 -
POJ 1984 Navigation Nightmare(路径压缩并查集)
POJ 1984 Navigation Nightmare(路径压缩并查集)分析:定最左上角的坐标为(0,0).x为横坐标,y为纵坐标.首先本题需要离线处理,即先读入所有的输入数据,然后根据询问的时间点来处理.其次,本题可用并查集,且x[]和y[]数组保存了当前点到其父节点的坐标差值.比如第一句输入为 1 2 3 N 表示从1点朝北方向长3的路可以到2点,那么2的父亲就是1点,且x[2原创 2014-03-11 23:13:04 · 1410 阅读 · 0 评论 -
POJ 2492 A Bug's Life(路径压缩并查集)
POJ2492 A Bug's Life(路径压缩并查集)问题描述:有N个虫子和M次两个不同虫子的交流行为.现在假设虫子只有两种性别,且只有不同性别的虫子才会相互相互交流.问你这M次交流行为中是否有一些虫子违法了上述假设?分析:路径压缩并查集,如果两个虫子交互,那么合并他们的连通分量,且v[i]=0表示它和父节点同性别,v[i]=1表示它和父节点不同性别.如果有处于同一个连通分量的虫子交流原创 2014-03-12 12:41:31 · 1101 阅读 · 0 评论 -
HDU 3038 How Many Answers Are Wrong(路径压缩并查集)
HDU3038 How Many Answers AreWrong(路径压缩并查集)分析:本题与POJ1733很相似,也是连续区间的并查集问题.http://blog.youkuaiyun.com/u013480600/article/details/21128299首先本题令v[a]表示半开半闭区间(F[a],a]内序列的和(其中保证F[a]每当读入 u v sum时,令a=u-1,b=v.原创 2014-03-13 13:59:52 · 1148 阅读 · 0 评论 -
POJ 2912 Rochambeau(路径压缩并查集)
POJ 2912 Rochambeau(路径压缩并查集)分析:由于题目N现在我们假设了i是裁判,那么我们如何才能判断他到底是还是不是呢?首先对于输入的 a ?b:如果a b 分别属于不同的分量,那么根据a,b与对应树根的关系,合并两棵树,保证假设的裁判不做根.具体如下:V[a]=0时,a=F[a]V[a]=1是,a>F[a]V[a]=2是,aa = b temp=0原创 2014-03-13 23:29:31 · 1810 阅读 · 3 评论 -
POJ 1182 食物链(并查集:路径压缩)
POJ 1182 食物链动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,原创 2014-03-10 20:39:04 · 1481 阅读 · 1 评论 -
POJ 1456 Supermarket(贪心算法,可用并查集优化)
POJ 1456 Supermarket(贪心算法)分析:对于当前集合中最大利益的商品肯定要安排,且要安排在它的截止时间点卖出.可以证明上述选择不会丢失最优解,因为首先最大利益的商品一定不能放弃,否则可以用这个商品替代它截止时间上卖的那件商品.其次如果存在最优解使得最大商品放在它截止时间点前面买,此时它截止时间上卖的是另外一个商品,那么互换这两件商品,依然是最优解.将所有商品按利润从大原创 2014-03-12 17:19:59 · 1411 阅读 · 0 评论 -
UVA 1329 Corporative Network(并查集:路径压缩)
UVA1329 Corporative Network初始时有n个点,每个点都没有父节点,然后依次执行下面两条命令:I u v :把节点u的父亲设置为v,并且设u节点到v的距离为|u-v|%1000,输入保证执行I命令的时候,u没有父节点。E u:查询u节点到根节点的距离。输入:首先是T,表示实例个数。每个实例第一行是n(5输出:对于每条E指令,输出查询结果。分析:对于每条原创 2014-03-09 00:19:33 · 1222 阅读 · 0 评论 -
ZOJ 3321 Circle(并查集)
ZOJ 3321 Circle(并查集)http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3321题意: 给你一个n节点m条边的无向图,问你该图是否正好是一个环?分析: 无向图是一个简单环 充要条件是 所以节点的度数==2且图连通. 所以我们只需要记录每个节点的度且用原创 2014-09-22 12:20:39 · 1924 阅读 · 2 评论 -
UVA 1160 X-Plosives(并查集)
UVA 1160 X-Plosives现在手上有一些化合物,每个化合物都不同且由两个整数构成,当你手上存在这种情况时:手上有至少N(N>2)个化合物且其中有N个化合物正好包含N个不同的整数(即这N个整数每个出现了2次)。那么此时化合物不稳定。比如你有化合物1和2,2和3,3和1那么就是不稳定的,但是你有1和2,2和3 那么就是稳定的。现在给出所有化合物给你的顺序,你要保证不会出现化合物原创 2014-03-08 23:39:17 · 1306 阅读 · 0 评论 -
HDU 1213 How Many Tables(并查集)
HDU1213 How Many Tables现在给你由1到N个数字组成的M对整数对,问你有多少个连通分量。每对整数X和Y(X不等于Y)表示X和Y在一个连通分量里面。输入:首先是T(1输出:连通分量个数。分析:直接读取数据,判断即可。AC代码:0ms #include#include#includeusing namespace std;const int MAXN原创 2014-03-09 11:16:59 · 1111 阅读 · 0 评论 -
HDU 1198 Farm Irrigation(并查集)
HDU 1198 Farm Irrigation题目大意,给你一个N*M的矩阵,有11种格子,每个格子互联的部分不同,问你矩阵一共有几个连通分量。输入:每个实例第一行是N和M,1 输出:连通分量个数。分析:从上到下,从左到右一个一个格子分析,如果当前格子连通上方且它上面已经有格子(且该格子也连通了当前格子),那么它属于上面那个连通分量,如果当前格子连通左边,且它左边还有格子(且该格原创 2014-03-08 21:33:25 · 1265 阅读 · 0 评论 -
POJ 1611 The Suspects(并查集)
POJ1611The Suspects(并查集)现在有n个学生(从0号到n-1号),其中0号学生是有可能非典的,只要和被怀疑有非典的学生在一个社团的学生都是有可能有非典的且需要被隔离,但是学校有很多社团,所以现在要你求一共有多少学生需要被隔离?输入:多组实例.每个实例第一行n和m (0 输出:需要被隔离的学生数.分析:所有学生被处理前都是独立的连通分量,以自己作为根.只要读入一个社原创 2014-03-11 11:17:28 · 1500 阅读 · 0 评论 -
POJ 2236 Wireless Network(并查集)
POJ2236 Wireless Network(并查集)分析:每修复一台电脑,就把它并入距离它不差过D距离的连通分量,并和并这些所有的连通分量.每次查询只需要看被查询的两台电脑是否在同一个连通分量即可.现在问题就是如何快速的知道任何一个点附近距离它不超过D的所有其他点?直观方法:用两个for来遍历每一个点,求他们之间的距离.用vector保存每个点附近距离不超过D距离的顶点编号.(点原创 2014-03-12 10:35:49 · 1434 阅读 · 0 评论 -
HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
HDU 1272 小希的迷宫上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把原创 2014-03-09 13:32:37 · 1386 阅读 · 0 评论 -
ZOJ 3659 Conquera New Region(并查集:维护根节点信息)
ZOJ3659 Conquera New Region现在有N个城市,N-1条路构成的树。C(i,j)表示如果城市i和城市j之间有一条路,那么他们之间路的容量。S(i,j)表示从i到j的一条路线的最大容量,其等于从i到j的所有路中的最小容量。现在要找一个城市,使得它到其他N-1个点的S值之和最大。输入:多组实例。每个实例第一个为N. (1 ≤ N ≤ 200,000),接下来有N-1行,为原创 2014-03-09 19:06:49 · 1360 阅读 · 1 评论 -
HDU 1232 畅通工程(并查集)
HDU 1232 畅通工程Time Limit: 4000/2000 MS(Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25811 Accepted Submission(s): 13493Problem Description某省调查城镇交通状况,得到现有城镇道路原创 2014-03-09 11:35:43 · 954 阅读 · 0 评论 -
HDU 1325 POJ 1308 Is It ATree?(并查集)
HDU 1325 POJ 1308 Is It ATree?(计算树的入度)一棵树是一个数据结构,它要么是一个空要么是满足下面特性的结构:1. 只有一个根节点,这儿根节点没有入度.2. 除了这个根节点其他所有的节点都只有一个入边(指向它的边).3. 从根节点到任意其他的节点有且仅有一条路现在给你一颗树的所有有向边,然后问你这个树是不是一颗合法的树.输入:多原创 2014-03-11 00:54:42 · 1295 阅读 · 0 评论 -
POJ 2524 Ubiquitous Religions(并查集)
POJ 2524 Ubiquitous Religions(并查集)题目大意:给你n个节点和m条边,然后问你有多少个连通分量.分析:每读入一条边,如果这条边的两个点不在一个连通分量,那么总的连通分量数目就减少1.初始连通分量有n个.AC代码:344ms#include#includeusing namespace std;const int MAXN=50000+100;i原创 2014-03-12 16:10:44 · 1055 阅读 · 0 评论 -
POJ 2253 Frogger(并查集+二分)
POJ 2253 Frogger(并查集+二分)http://poj.org/problem?id=2253题意:给你N个石头的坐标(x,y),现在青蛙要从第一个石头跳到第二个石头上去,但是青蛙每次最大的跳跃距离有限制.所以现在问你青蛙从第一个石头跳到第二个石头的最短跳跃距离是多少?分析: 网上说这题有最短路径解的,生成树解的.本来我是冲着最短路径解法来的,但是看了一遍原创 2014-07-11 18:25:32 · 1549 阅读 · 0 评论 -
并查集
并查集 并查集是一种数据结构,一般它处理的是图(其实是解决无向图的)的连通分量问题,但是当并查集的根节点可以维护更多的信息时,并查集可以解决范围更广的基于无向图连通分量的问题。做了这么多并查集的题目后,我感觉并查集就是解决有关物与物之间的关系问题的数据结构且这种关系还必须是可传递的关系,所以一般遇到这种问题可以先尝试用并查集解决。 并查集的基原创 2015-03-08 11:00:28 · 2682 阅读 · 6 评论