本文主要是介绍『仙人掌判环·贪心』沙漠点列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
P r o b l e m \mathrm{Problem} Problem
S o l u t i o n \mathrm{Solution} Solution
显然,仙人掌不存在复杂环,这是这道题解题的关键。
- 对于割边,我们可以直接删。删一条边,贡献为1.
- 对于简单环,若删 k k k条边,贡献是 k − 1 k-1 k−1.
我们需要判出所有的简单环,但是我们需要解决的难题是:
- 形如8字型的环要判成两个。
- 需要具体求出每一个环的大小。
此时无向图的tarjan算法、割边、并查集都不可以,我们可以尝试DFS。
我们记录图上某一个点在搜索树上的深度,若找到已经访问过的点,深度之差就是环的大小,记得需要特判环的大小大于2,因为不存在2元环(如题,没有重边)。
代码如下:
void dfs(int x,int fa)
{for (int i=Link[x];i;i=e[i].next){int y = e[i].y;if (y == fa) continue;if (!dis[y
这篇关于『仙人掌判环·贪心』沙漠点列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!