【发布时间】:2016-09-02 05:02:25
【问题描述】:
Graph Centroid 是等距离或距离小于或等于 (N/2) 的顶点,其中 N 是通过该顶点连接的连接组件的大小?! [需要更正吗?!]
这是 CodeForces 的一个问题,要求查找每个顶点是否是质心,但在一次移除和替换一个边之后。
我需要帮助来完善这个伪代码/算法。
循环所有顶点: 循环所有边: 将每条边定位在两个未连接节点之间的每个空边位置 每个连接组件的计数大小 (*1)。 如果所有尺寸都小于或等于 N/2, 然后返回真问题是这个算法至少会在 O(N*M^2)) 中运行。这是不可接受的。
我查找了答案,但我无法提出其他人使用的算法的高级抽象。能否请您帮助我了解这些解决方案的工作原理?
(*1)DFS Loop
【问题讨论】:
-
请注意,代码强制问题仅与树有关,与一般图无关。
-
您能否对这些解决方案文件中使用的算法进行高级伪编码?
-
大约有 150 份被接受的提交,我检查过的没有一个对文档有太多的困扰......
-
不是一个完整的算法,只是一个想法:问题陈述要求一个边缘替换。由于图是树,因此每个连接的组件也将是一棵树。通过删除任何边并添加新边,您可以将任意数量的顶点从一个组件移动到另一个组件,因此您“只需”检查是否最多有一个组件具有超过 n/2 个节点,以及是否存在也就是说,存在另一个组件,使得两者组合最多具有 n 个节点。
-
更正:根据组件的布局,可能并不总是可以找到一条边来切断任意数量的节点,但总体思路应该仍然有效。
标签: algorithm graph-algorithm depth-first-search centroid connected-components