SDOI2008Cave 洞穴勘测

无限膜拜CLJ大牛……

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

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

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

代码:

 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.   

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

SDOI2008Cave 洞穴勘测

时间: 2024-10-27 07:53:33

SDOI2008Cave 洞穴勘测的相关文章

[BZOJ2049] [CodeVS1839] [SDOI2008] Cave 洞穴勘测 (LCT)

Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通

[SDOI2008]Cave 洞穴勘测

Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通

BZOJ 2049([Sdoi2008]Cave 洞穴勘测-LCT)[Template:LCT]

2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 4809  Solved: 2141 [Submit][Status][Discuss] Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接

【bzoj 2049】Cave 洞穴勘测

Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通

洞穴勘测(bzoj 2049)

Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通

BZOJ 题目2049: [Sdoi2008]Cave 洞穴勘测(link cut tree)

2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 4698  Solved: 2107 [Submit][Status][Discuss] Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接

BZOJ 2049: [Sdoi2008]Cave 洞穴勘测

二次联通门 : BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 其实指针也不是很慢 我的指针代码能吊打70%的数组 及80%的指针.... /* BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT 连边 删边 查询是否在同一树中时, 只需要一直向上跳 看看树根是否相同就好了 */ #include <cstdio> #include <cstdlib> #include <iostream> #define Max 400009 int

link cut tree 洞穴勘测

/*[bzoj2049][Sdoi2008]Cave 洞穴勘测 2014年7月30日1,06923Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区 .经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道 组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条 通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这 些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而 通道不太稳

【bzoj2049】[Sdoi2008]Cave 洞穴勘测 link-cut-tree

2016-05-30  11:04:51 学习了link-cut-tree 二中神犇封禹的讲义感觉讲的超级清晰易懂啊(没有的可以q窝 算是模板吧 #include<bits/stdc++.h> #define N 10005 #define inf 1000000000 #define ll long long using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){