基环树
bandiaoz_cjl
这个作者很懒,什么都没留下…
展开
-
洛谷 P4381 [IOI2008]Island
洛谷 P4381 [IOI2008]Island 题意 给出一个基环树森林,求所有基环树的直径的和。 解法 基环树可以看作一个环上连着很多小树,那么直径可能是小树的直径,也可能是两棵小树的深度之和加环上距离较大的部分。小树的直径可以在拓扑排序的时候维护好,ans1[v] = max({ans1[v], d[u] + d[v] + e.second, ans1[u]});,这样可以直接访问根,也就是环上的点来询问直径,后者需要在环上做dp,类似于 环路运输 ,并且这里求最大值,环的距离也是取最大值,所以可以不原创 2020-11-30 03:23:30 · 401 阅读 · 0 评论 -
洛谷P2607 [ZJOI2008] 骑士 基环树森林dp(二次dp法)
洛谷P2607 [ZJOI2008] 骑士 题意 有 nnn 个骑士,每个骑士有讨厌的人(不是自己),选出一个骑士团,没有讨厌的人和自己在一个骑士团。问骑士团的最大的战斗力。 解法 类似没有上司的舞会。 这题有很多坑:不一定是根节点处在环内;二元环的处理;有多个连通块,这是一个基环树森林,需要对答案相加;答案暴 intintint 。 二次树形dp法; 二元环的处理,应该标记不访问的边的编号,而不是边的顶点; 对于每一棵基环树,在环上选一条边,强制不选这个边上的一个点,做一次dp,再强制选,这样就可以忽略原创 2020-11-26 16:45:35 · 148 阅读 · 0 评论 -
Codeforces Round #686 (Div. 3) E. Number of Simple Paths
Problem - E. Number of Simple Paths - Codeforces 题意 给一个 nnn 个点 nnn 条边的联通图,问有多少条简单路径。 解法 显然这是一个基环树,可以看作一个环连了很多棵小树。小树内部任取两点路径数为 111 ,但是如果经过那个环,就会有两条简单路径。所以总的简单路径数为 n⋅(n−1)−∑szi⋅(szi−1)n\cdot(n-1)-\sum sz_i\cdot(sz_i-1)n⋅(n−1)−∑szi⋅(szi−1) ,szisz_iszi 表示每棵原创 2020-11-25 12:32:05 · 325 阅读 · 2 评论 -
洛谷P5022 旅行 (基环树,断环法)
洛谷P5022 旅行 题意 给 nnn 个点 m(m∈{n−1,n})m(m\in\{n-1,n\})m(m∈{n−1,n}) 条边的图,求一个字典序最小的 dfsdfsdfs 序。 给定图保证连通无自环无重边。 解法 如果 m=n−1m=n-1m=n−1 ,那么这就是一棵树,直接排序每个点的邻接表,然后做dfs得到dfs序就是答案。- 否则 m=nm=nm=n ,那么这是一棵基环树,先拓扑排序找到环,然后暴力枚举删环上的边,并做dfs维护答案即可。 复杂度 O(n2)O(n^2)O(n2) 。原创 2020-11-25 20:44:09 · 138 阅读 · 0 评论