网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月02日漏签0天
noip吧 关注:25,162贴子:642,083
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 12回复贴,共1页
<<返回noip吧
>0< 加载中...

求教树的dfs序问题

  • 只看楼主
  • 收藏

  • 回复
  • taorunz
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
换根的时候,只要记录下当前的根,查询时对当前根的祖先节点特殊处理,但是换父亲怎么搞?


  • YoEnky
  • 进队爷
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
难道没记录?


2025-07-02 05:01:39
广告
  • taorunz
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

例如这样,1号是建树时的根,4号是实际的根,现在把2的父亲由3换成5,怎么搞?
1和2、3和4、4和5之间有很多节点,不能直接反过来。


  • sillycross
  • NOI铜牌
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想了一个比较囧的方法…… 不知道行不行…… DFS序时候进栈放入序列,出栈也放入序列。 这样每个结点在序列中出现两次,子树对应其根出现在序列中的两个位置为端点的区间。
这样的好处就是不用额外维护子树对应区间了…… 然后问题就简单了……
先把要砍的子树提取出来……(要么是连续一段,要么是整个序列扣掉一段)
然后插入到要拼的位置……
像3楼那种情况的话,新的dfs序子树根会变成3…… 不过无所谓,不影响查询……
具体操作的话,可以考虑用一个数组记录下来每个结点在dfs序中对应的两个splay结点…… 然后提取子树就可以直接用那两个splay结点砍出来…… 树砍出来后,查询和判断某个结点是否在子树内也可以做了……
这东西我没实现过(一般见到换根砍树就不想做了>_<)…… 只是刚才随便想的…… 很可能有错,欢迎拍砖……


  • taorunz
  • NOI金牌
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回noip吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示