【算法专题】仙人掌图问题

【参考】

仙人掌相关问题的处理方法(未完待续)

★WC2017-immortalCO Making Graph into Trees

【DFS树】

仙人掌图:每条边至多在一个环上的图。

仙人掌图中每个环相当于一个点双连通分量,那么用Tarjan算法处理dfs树。

对于树边(low[y]>dfn[x])直接处理,环边先忽略。

每个环只在其深度最小的点x处理,设深度最大的点为y,则找到(x,y)并进行处理(fa[y]≠x&&dfn[y]>dfn[x])。

例题:【BZOJ】1023: [SHOI2008]cactus仙人掌图 静态仙人掌(DFS树) 求直径,建立DFS树,环上单调队列维护。

例题:【BZOJ】4316: 小C的独立集 静态仙人掌 求最大独立集,建立DFS树,环上动态规划。

【圆方树】

原图每个点都是圆点,非环边直接相连。对于每个环,新建一个方点连接这个环的所有圆点(环边不连)。

建图方法同DFS树,在处理环的时候连接方点。取出一个环只要取出方点的所有邻点即可(按顺序)。

例题:【BZOJ】2125: 最短路 圆方树(静态仙人掌) 求多源最短路,建立圆方树,找LCA。

【点双】

对于无向连通图,对每个点双建立一个方点连向其中所有点并消除点双内部的连边,这样就是广义圆方树。

例如经典的旅行问题:询问带点权无向图中,两点间所有简单路径的最小权值。

两点间的简单路径并=两点间的唯一点双链。(如果存在一条其它路径到达,则与已有点双矛盾。)

所以建立广义圆方树后就是查询树链最小值的问题了。(每个方点的权=连接圆点的最小权)

 

转载于:https://www.cnblogs.com/onioncyc/p/8315835.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值