SDOI2008Cave 洞穴勘测
2024-10-15 00:21:29
无限膜拜CLJ大牛……
不会动态树的弱弱在CLJ的帮助下AC了此题
我想到了并查集(人人都会想到的吧……囧),但不知道应该如何处理destroy操作……
其实 make操作的实质就是:把x节点到其所在集合代表元的路上所有有向边都反过来,然后就可以处理本体所需的所有操作了(自己想想为何)。
代码:
var i,n,m,x,y:longint;
ch,cha:char;
fa:array[..] of longint;
function find(x:longint):longint;
begin
while x<>fa[x] do x:=fa[x];
exit(x);
end;
procedure make(x:longint);
var y,tmp:longint;
begin
y:=fa[x];fa[x]:=x;
while y<>x do
begin
tmp:=fa[y];fa[y]:=x;
x:=y;y:=tmp;
end;
end;
procedure connect(x,y:longint);
begin
make(x);make(y);
fa[x]:=y;
end;
procedure destroy(x,y:longint);
begin
make(x);
fa[y]:=y;
end;
procedure query(x,y:longint);
begin
if find(x)<>find(y) then writeln('No') else writeln('Yes');
end;
procedure main;
begin
readln(n,m);
for i:= to n do fa[i]:=i;
for i:= to m do
begin
read(ch);cha:='a';while cha<>' ' do read(cha);readln(x,y);
if ch='C' then connect(x,y)
else if ch='D' then destroy(x,y)
else query(x,y);
end;
end; begin
main;
end.
最后我想说一句:并查集还大有文章可做!
最新文章
- .NET垃圾回收 – 原理浅析
- C# byte[]、struct、intptr等的相互转换
- 跟着百度学PHP[4]OOP面对对象编程-11-Final关键字
- Java面试题大全(三)
- HTML5 Web Storage
- Cheatsheet: 2014 03.01 ~ 03.31
- Spring3.0将全面支持REST
- 2016年JavaScript技术栈展望
- SaaS系列介绍之八: SaaS的运营模式
- [转贴]watin的一些例子
- Linux下软件的安装
- 给Array添加删除重复元素函数
- 2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客
- jquery实现上传图片预览(需要浏览器支持html5)
- 【Ubuntu 16】启动Eclipse Indigo报错 error code1 jdk没有配置好
- Iterator和Enumeration的区别
- Selenium模块的使用
- [Hibernate] 通过 properties 类和 hql 语句进行动态查询
- 【Spark】Spark性能调优
- Flutter基础用法解析
热门文章
- Catalyst揭秘 Day3 sqlParser解析
- Python学习_从文件读取数据和保存数据
- 去掉代码中自动生成的TODO Auto-generated method stub
- CSS 将按钮转成超链接样式
- C#写的SQL聚合函数
- 微软职位内部推荐-Sr Development Lead-OSG-IPX
- sharepoint One-Time Passwords (windows basic authentication)
- Impala入门笔记
- [转]BluetoothDevice.getType()-一个常常被忽略了的函数。好用的不要不要的
- [JavaScript] js 判断闰年