如果给定的树是MST,我如何检查线性时间O(n)?
答案 0 :(得分:-1)
您熟悉Union-Find流程吗?
如果您刚获得树,则只需检查其连接图是否。我的意思是只询问它是否只有一个组件。
否则,维护一个映射[pair<int,int>
,int]或类似的散列库来存储两个节点之间的最小权重,并比较给定的树,每个边缘是否具有最小权重。
如果没有那么你肯定它不是MST,否则你已经查找它是否已连接。如果是,那么它的MST。
在Union Find中使用树短路。并且要查询树是否已连接,您可以在联合之前轻松检查每个边缘,如果它已经联合起因,那么您确定存在一个循环而不是树,那么不是MST。