圆方树,是解决仙人掌问题的实用方法,假设最初图都是圆点,对于每个环新建一个方点并连接这个环上所有圆点,能很好规避同一个点可能属于很多个环的情况,并且发现build完之后是一棵树

广义圆方树,能够不局限于去解决仙人掌问题,能上升到无向图层面,很好解决图上路径类,等等问题

那么如何建立圆方树?有点类似 \(v-dcc\) ,建立方点,连接当前点双联通分量的所有点,实现通过tarjan算法

但注意 \(v-dcc\) 把整个点双联通分量都缩成一个点了,圆方树还保持着圆点,也就是说圆方树点数是 \(n+k\) ,其中 \(k\) 标号是点双个数

具体实现不详讲,但存在值得注意的细节:

令 \(now\) 为当前 \(dfs\) 到的节点, \(y\) 为其搜索树上的一个儿子。注意, \(now\) 与 \(y\) 在栈中不一定相邻。也就是说,下面两种写法:

  1. 弹出栈顶直到弹出 \(now\) 为止;最后再压入 \(now\)
  2. 弹出栈顶直到弹出 \(y\) 为止,最后再将虚点向 \(now\) 连边

    前者错误,后者正确。

代码:

void tarjan(int x){
++nown;
dfn[x]=low[x]=++num;
st.push(x),w[x]=-1;
for(int i=head[x];i;i=edge[i].Next){
int to=edge[i].to;
if(!dfn[to]){
tarjan(to);
low[x]=min(low[x],low[to]);
if(low[to]>=dfn[x]){
addedge2(++diannum,x),addedge2(x,diannum);
++w[diannum];
while(1){
addedge2(diannum,st.top()),addedge2(st.top(),diannum);
++w[diannum];
if(st.top()==to){
st.pop();
break;
}
st.pop();
}
}
}
else low[x]=min(low[x],dfn[to]);
}
}

\(v-dcc\) 和圆方树运用区别何在?后者对于点双内部的处理能够非常方便,而前者似乎处理整个点双对答案的贡献(不考虑单点)会十分好搞

圆方树的性质:

  1. 是树

  2. 每条边都是方点和圆点连接边

  3. 每个方点对应一个点双联通分量

  4. 方点的度数是点双联通分量的大小

  5. 圆点是割点才有超过1个儿子,否则只连接一个方点儿子

  6. 圆方树上两个点的路径经过的圆点是图上两点之间的必经点

还有一些点双的小性质:对于一个点双的两点,它们之间简单路径的并集等于这个点双集合

圆方树能够很好地将无向图上问题转化为树上问题,进行统计类的时候可能割点会被统计多次,所有一般把方点赋为-1,然后就很好做了,等等就不细说了

圆方树 useful things的更多相关文章

  1. 圆方树简介(UOJ30:CF Round #278 Tourists)

    我写这篇博客的原因 证明我也是学过圆方树的 顺便存存代码 前置技能 双联通分量:点双 然后就没辣 圆方树 建立 新建一个图 定义原图中的所有点为圆点 对于每个点双联通分量(只有两个点的也算) 建立一个 ...

  2. 洛谷P4630 铁人两项--圆方树

    一道很好的圆方树入门题 感谢PinkRabbit巨佬的博客,讲的太好啦 首先是构建圆方树的代码,也比较好想好记 void tarjan(int u) { dfn[u] = low[u] = ++dfn ...

  3. 仙人掌&圆方树学习笔记

    仙人掌&圆方树学习笔记 1.仙人掌 圆方树用来干啥? --处理仙人掌的问题. 仙人掌是啥? (图片来自于\(BZOJ1023\)) --也就是任意一条边只会出现在一个环里面. 当然,如果你的图 ...

  4. 2019.03.29 bzoj5463: [APIO2018] 铁人两项(圆方树+树形dp)

    传送门 题意简述:给你一张无向图,问你满足存在从a−>b−>ca->b->ca−>b−>c且不经过重复节点的路径的有序点对(a,b,c)(a,b,c)(a,b,c) ...

  5. 图论杂项细节梳理&模板(虚树,圆方树,仙人掌,欧拉路径,还有。。。)

    orzYCB 虚树 %自为风月马前卒巨佬% 用于优化一类树形DP问题. 当状态转移只和树中的某些关键点有关的时候,我们把这些点和它们两两之间的LCA弄出来,以点的祖孙关系连成一棵新的树,这就是虚树. ...

  6. 【BZOJ2125】最短路(仙人掌,圆方树)

    [BZOJ2125]最短路(仙人掌,圆方树) 题面 BZOJ 求仙人掌上两点间的最短路 题解 终于要构建圆方树啦 首先构建出圆方树,因为是仙人掌,和一般图可以稍微的不一样 直接\(tarjan\)缩点 ...

  7. 【CF487E】Tourists(圆方树)

    [CF487E]Tourists(圆方树) 题面 UOJ 题解 首先我们不考虑修改,再来想想这道题目. 我们既然要求的是最小值,那么,在经过一个点双的时候,走的一定是具有较小权值的那一侧. 所以说,我 ...

  8. 【APIO2018】铁人两项(圆方树,动态规划)

    [APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...

  9. bzoj3331 压力(圆方树)

    题目链接 圆方树 圆方树就是对于联通无向图中的每一个点双新建一个方点,与点双中的每个点连一条边,然后将原来的边删去.将原来的点看作圆点,新建的点看作方点.所以叫做圆方树. 性质 1.圆方树肯定是棵树( ...

  10. 【NOI2013模拟】坑带的树(仙人球的同构+圆方树乱搞+计数+HASH)

    [NOI2013模拟]坑带的树 题意: 求\(n\)个点,\(m\)条边的同构仙人球个数. \(n\le 1000\) 这是一道怎么看怎么不可做的题. 这种题,肯定是圆方树啦~ 好,那么首先转为广义圆 ...

随机推荐

  1. Go命令

    build: 编译包和依赖 clean: 移除对象文件 doc: 显示包或者符号的文档 env: 打印go的环境信息 bug: 启动错误报告 fix: 运行go tool fix fmt: 运行gof ...

  2. 八 Appium常用方法介绍(转)

    由于appium是扩展了Webdriver协议,所以可以使用webdriver提供的方法,比如在处理webview页面,完全可以使用webdriver中的方法.当然在原生应用中,也可以使用. 1.元素 ...

  3. 如何在达梦数据库中追踪慢SQL

    在达梦数据库中,我们可以通过开启日志记录和设置最小执行时间来追踪慢SQL.下面是具体的步骤: 1. 修改dm.ini文件 使用以下命令编辑dm.ini文件: cd /home/dmdba/dmdbms ...

  4. CF-1860C Game on Permutation题解

    题意:在一条数轴上,Alice可以跳到在你所在点前面且值比当前所在点小的点.每回合可以向任意符合要求的点跳一次.当轮到Alice的回合同时不存在符合要求的点,Alice就赢了.Alice可以选择一个点 ...

  5. 52条SQL语句,性能优化!

    52条SQL语句,性能优化! SQL语句性能优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 where 子句中对 ...

  6. MindSponge分子动力学模拟——定义一个分子系统(2023.08)

    技术背景 在前面两篇文章中,我们分别介绍了分子动力学模拟软件MindSponge的软件架构和安装与使用教程.这里我们进入到实用化阶段,假定大家都已经在本地部署好了基于MindSpore的MindSpo ...

  7. MIT 6.828 Lab实验记录 —— lab1 Booting PC

    实验参考信息 MIT 6.828 lab1 讲义地址 MIT 6.828 课程 Schedule MIT 6.828 lab 环境搭建参考 MIT 6.828 lab 工具guide Brennan' ...

  8. Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全

    系列文章 Nomad 系列文章 Traefik 系列文章 Tailscale 系列文章 概述 终于到了令人启动的环节了:Nomad+Traefik+Tailscale 集成实现零信任安全. 在这里: ...

  9. 你知道Golang的模板怎么用吗?带你了解动态文本的生成!

    Golang Template Go语言中的Go Template是一种用于生成文本输出的简单而强大的模板引擎.它提供了一种灵活的方式来生成各种格式的文本,例如HTML.XML.JSON等. Go T ...

  10. 「luogu - P4126」「ahoi 2009」最小割

    link. 也许题不错,反正有点降智- 先给结论,在 \[V_N=V \\ E_N=E \\ c(x,y)=w(x,y) \] 的流网络中: 可行边:在增广完的 induced subgraph 中, ...