您熟悉 Union-Find 流程吗?如果你只是得到一棵树,你只需要检查它是否连通图。我的意思是只查询它是否只有一个组件。否则维护一个 map[ pair<int,int>
, int] 或类似的散列库来存储两个节点之间的最小权重,并比较给定树的每条边是否具有最小权重。如果没有,那么您确定它不是 MST,否则您必须查找它是否已连接。如果是,那么它的 MST。
在联合查找中使用树短路。并且要查询树是否连接,您可以在联合之前轻松检查每条边,如果它已经联合原因,那么您确定有一个循环并且它根本不是树,所以不是 MST。