SSL1896家族(并查集)

题意:

你有n个人,给你其中m个亲戚关系,问你其中p个得关系是什么,是亲戚输出yes,不然输出no。
如果1和3是亲戚,2和3是亲戚,那么1和2也是亲戚
n,m,p<50000

思路:

并查集得经典例题,把他们是属于亲戚关系的放到一个集合里面,给一个父亲节点。然后找就只用找他们的父亲是否相同就好了。

时间复杂度

O(n*****),表示有点看不懂….反正很小就是了

const
 maxn=50000;
var
 f:array [1..maxn] of longint;
 i,j,n,m,p,x,y:longint;

function getfather(v:longint):longint;
var
 i,j:longint;
begin
 if f[v]<>v then getfather:=getfather(f[v])
            else getfather:=v;
 f[v]:=getfather;
end;

function indge(x,y:longint):boolean;
var
 fx,fy:longint;
begin
 fx:=getfather(x);
 fy:=getfather(y);
 if fx=fy then indge:=true
          else indge:=false;
end;

begin
 readln(n,m,p);
 for i:=1 to n do
  f[i]:=i;
 for i:=1 to m do
 begin
  readln(x,y);
  f[getfather(y)]:=getfather(f[x]);
 end;
 for i:=1 to p do
 begin
  readln(x,y);
  if indge(x,y) then writeln('Yes')
               else writeln('No');
 end;
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值