码迷,mamicode.com
首页 > 其他好文 > 详细

SDOI2008Cave 洞穴勘测

时间:2014-06-20 18:15:36      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:des   style   class   blog   code   http   

无限膜拜CLJ大牛……

不会动态树的弱弱在CLJ的帮助下AC了此题

我想到了并查集(人人都会想到的吧……囧),但不知道应该如何处理destroy操作……

其实 make操作的实质就是:把x节点到其所在集合代表元的路上所有有向边都反过来,然后就可以处理本体所需的所有操作了(自己想想为何)。

代码:

bubuko.com,布布扣
 1 var i,n,m,x,y:longint;
 2     ch,cha:char;
 3     fa:array[0..210000] of longint;
 4 function find(x:longint):longint;
 5  begin
 6    while x<>fa[x] do x:=fa[x];
 7    exit(x);
 8  end;
 9 procedure make(x:longint);
10  var y,tmp:longint;
11  begin
12  y:=fa[x];fa[x]:=x;
13  while y<>x do
14   begin
15   tmp:=fa[y];fa[y]:=x;
16   x:=y;y:=tmp;
17   end;
18  end;
19 procedure connect(x,y:longint);
20  begin
21  make(x);make(y);
22  fa[x]:=y;
23  end;
24 procedure destroy(x,y:longint);
25  begin
26  make(x);
27  fa[y]:=y;
28  end;
29 procedure query(x,y:longint);
30  begin
31  if find(x)<>find(y) then writeln(No) else writeln(Yes);
32  end;
33 procedure main;
34  begin
35    readln(n,m);
36    for i:=1 to n do fa[i]:=i;
37    for i:=1 to m do
38     begin
39      read(ch);cha:=a;while cha<>  do read(cha);readln(x,y);
40      if ch=C then connect(x,y)
41      else if ch=D then destroy(x,y)
42      else query(x,y);
43     end;
44  end;
45 
46 begin
47  main;
48 end.   
View Code

最后我想说一句:并查集还大有文章可做!

SDOI2008Cave 洞穴勘测,布布扣,bubuko.com

SDOI2008Cave 洞穴勘测

标签:des   style   class   blog   code   http   

原文地址:http://www.cnblogs.com/zyfzyf/p/3796535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!