初学并查集-3:浴火银河星际跳跃

题目描述 Description

小 K 又在玩浴火银河了。。。不过这次他的目的不是跑运输赚钱,而

是做任务赚钱。

他想知道关于一个任务的两个星系是否可以连通。

输入描述 Input Description

第一行,三个数,X,N,M

X 表示出现的星系代号的最大值;

N 表示有 N 个星际跳跃门;

M 表示有 M 个任务。

接下来的 N 行描述每个星际跳跃门:每行为两个数字(星系代号),

星际跳跃门连通这两个星系(星际跳跃门是可以双向通行的)

接下来的 M 行表示每个任务需要到达的星系,每个任务需要到达两

个星系。

输出描述 Output Description

共 M 行。

第 i 行表示第 i 个任务是否能完成:即两个星系是否能连通。(能→

Yes;不能→No)

样例输入 Sample Input

5 2 1

3 5

4 5

3 4

样例输出 Sample Output

Yes

var total,n,m:longint;
    father:array[1..10000000]of longint;
    used:array[1..10000000]of boolean;
    i,j,k,x,y:longint;
    yo:boolean;

function find(x:longint):longint;
         begin if father[x]=x
                  then exit(x);
               father[x]:=find(father[x]);
               exit(father[x]);
         end;

procedure union(a,b:longint);
          var i,j,k:longint;
          begin father[find(a)]:=find(father[b]);
          end;

begin yo:=false;
      fillchar(father,sizeof(father),0);
      fillchar(used,sizeof(used),true);
      readln(total,n,m);
      for i:=1 to total do
          father[i]:=i;
      for i:=1 to n do
          begin readln(x,y);
                if find(x)<>find(y)
                   then union(x,y);
          end;
      for i:=1 to m do
          begin readln(x,y);
                if find(x)=find(y)
                    then writeln(‘Yes‘)
                    else writeln(‘No‘);
          end;
end.
时间: 2024-10-24 09:49:04

初学并查集-3:浴火银河星际跳跃的相关文章

codevs 1365 浴火银河星际跳跃

1365 浴火银河星际跳跃 时间限制: 1 s   空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 小 K 又在玩浴火银河了...不过这次他的目的不是跑运输赚钱,而 是做任务赚钱. 他想知道关于一个任务的两个星系是否可以连通. 输入描述 Input Description 第一行,三个数,X,N,M X 表示出现的星系代号的最大值: N 表示有 N 个星际跳跃门; M 表示有 M 个任务. 接下来的 N 行描述每个星际跳跃门:每行为两个数字(星系

并查集 专题 之 银河战舰的奇妙距离

看题目就知道这是NOI2002的Galaxy——银河英雄传说 题目如下: 银河英雄传说 描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨威利组织麾下三万艘战舰迎敌. 杨 威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄气.在这次决战中,他将巴米利恩

初学并查集-1:家族

题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚. 输入描述 Input Description 第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系. 以下m行:每行两个数Mi,Mj,

初学并查集-2:最优布线问题

题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接. 为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用. 输入描述 Input Description 输入第一行为两个整数n,m(2<=n<=100000,2<=m<

初学并查集-4:6个朋友

题目描述 Description 有这么一种说法:认识6个人,你就认识全世界的人. Aiden现在有一张关系图,上面记载了N个人之间相互认识的情况.Aiden想知道,他能否只认识6个人就能间接认识这N个人呢? 输入描述 Input Description 第一行,两个数N,M,表示有N个人,M对认识关系. 接下来的M行,每行两个数ai,bi,表示ai与bi相互认识. 不保证认识关系不出现重复,保证ai≠bi. N个人的编号为1...N. 输出描述 Output Description 若只认识6

并查集初学(3)无间道之并查集 &amp;&amp; POJ2542 &amp;&amp; POJ1611

1.hihocoder上面讲的一道题 无间道之并查集 水题,精髓在于使用map容器进行打标签 #include <cstdio> #include <cstring> #include <iostream> #include <string> #include <map> #include <algorithm> using namespace std; const int maxn=10005; int p[maxn]; map&l

P1196 银河英雄传说(加权并查集)

P1196 银河英雄传说 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压 顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨 威利组织麾下三万艘战舰迎敌. 杨威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄气.在 这次决战中,他将巴米利恩星域战场划分成30000列,每列依次编号为1, 2, …, 30000.之后

并查集 (Union-Find Sets)及其应用

定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.常常在使用中以森林来表示. 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并. 主要操作 初始化 把每个点所在集合初始化为其自身. 通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N). 查找 查找元素所在的集合,即根节点. 合并 将两个元素所在的集合合并为一个集合. 通常来说,合并之前,应先判断两个元素是否属于

Codevs 1371 浴火银河跑运输

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description: 小 K 又在玩浴火银河了...不过这次他的目的真的是跑运输赚钱... 他想知道在两个星系之间跑运输最多可以赚多少钱. 他的路线是 [星系 1—星际 2] 输入描述 Input Description: 第一行,两个数,A,B: A 代表有多少种货物:B 代表小 K 的飞船最大承载重力: 接下来的 A 行:第 i 行表示第 i 种货物的信息: {在星系 1 的价格}{在星系 2