图论-仙人掌
Maxwei_wzj
AFO
展开
-
【BZOJ4784】仙人掌(ZJOI2017)-仙人掌判定+树形DP
测试地址:仙人掌 做法:本题需要用到仙人掌判定+树形DP。 首先如果原图就不是仙人掌了,那么再怎么加边肯定也成不了仙人掌,所以我们应该先判断原图是不是仙人掌。判定方法是:对于原图求出DFS树,对于所有不在DFS树中的边,连接的两点一定具有祖孙关系,它会覆盖中间这一段的路径,如果一条边被覆盖一次以上,就表示这条边处于两个或更多个简单环中,不符合仙人掌的定义,树上差分判断一下即可。 特判掉不是仙...原创 2018-04-23 16:45:27 · 625 阅读 · 0 评论 -
【BZOJ2125】最短路-圆方树+倍增LCA
测试地址:最短路 做法:本题需要用到圆方树来处理仙人掌。 题目中所给的图称作仙人掌图,即每条边至多在一个环上的图。对于这种图,我们一般把它转化成树后,将树上的某些算法修改后来解决仙人掌上的问题。常用的一种转化方式就是圆方树。 在圆方树中,一个圆点表示原仙人掌中就有的点,而一个方点表示一个点双连通分量(环),并且一个方点和它表示的环中所有的点连边。那么我们怎么样构造出圆方树呢?在求点双连通分量...原创 2018-04-20 11:57:21 · 401 阅读 · 1 评论 -
【BZOJ1023】仙人掌图(SHOI2008)-圆方树+DP+单调队列
测试地址:仙人掌图 做法:本题需要用到圆方树+DP+单调队列。 看到仙人掌就想到圆方树。我们可以把仙人掌上的DP转化为圆方树上的DP。 首先对于LCA在圆点上的点对,它们之间的距离可以直接通过圆方树的边权算出,所以这一部分直接用树上求直径的DP做就行了。 关键是LCA在方点上的点对,这样的点对之间的最短路径与这个方点所指的环的交是一条链,那么这条路径就分成两个部分:在某点子树中的部分和在环...原创 2018-05-06 16:58:28 · 416 阅读 · 0 评论 -
【BZOJ1487】无归岛(HNOI2009)-圆方树+DP
测试地址:无归岛 做法:本题需要用到圆方树+DP。 很显然题目中所给的图是一个仙人掌,那么这道题要求的就是仙人掌上的最大点权和独立集。 于是我们把仙人掌上的问题转化成圆方树上的问题。圆点上的DP很好处理,像树形DP一样处理即可,主要是方点上的DP,由于方点所在的环和它上面的圆点有两个相邻的点,所以要进行特殊判断,也就是对于一般的情况而言,dp(i,0/1)dp(i,0/1)dp(i,0/1)...原创 2018-05-06 19:54:08 · 411 阅读 · 0 评论 -
【BZOJ3899】仙人掌树的同构-圆方树+树上哈希+DP
测试地址:仙人掌树的同构 题目大意:定义一棵仙人掌树为,每个点最多在一个环中的无向图,且图中的环都是简单环。问有多少种点的置换,使得置换后的图和原图相同。n≤1000n≤1000n\le 1000。 做法:本题需要用到圆方树+树上哈希+DP。 首先显然的是,仙人掌同构就等同于圆方树同构。不过这题的仙人掌定义和一般的仙人掌有些不同:是每个点最多在一个环中,而不是每条边。又因为没有重边,所以没有...原创 2018-07-09 18:25:48 · 622 阅读 · 0 评论