所有边权均不相同的无向图最小生成树是唯一的证明

设G是所有边权均不相同的无向联通图。

证明一:

首先,易证图G中权值最小的边一定是最小生成树中的边。(否则最小生成树加上权值最小的边后构成一个环,去掉环中任意一条非此边则形成了另一个权值更小的生成树)。

之后用反证法,假设G存在俩个不同的最小生成树

①.设G的俩个不同的最小生成树T1 T2,设这俩颗生成树的并集为子图G1,G1为连通图且T1 T2显然为G1的最小生成树,由首先可得知俩颗生成树至少包含一条公共边,将G1中两颗生成树的公共边删去,得到子图G2。G2由一个或多个连通分量组成,其中至少有一个连通分量的最小生成树不唯一(否则若所有连通分量的最小生成树唯一,则将删掉的公共边加上,则T1等于T2,这与假设相矛盾)。

②.对其中一个最小生成树不唯一的连通分量设为H,若H中点数>2,重复①的操作。否则H中只有俩个点,由于所有边权值不同,显然最小生成树唯一,这与①中的最后一句相矛盾。

综上,所有边权均不相同的无向图最小生成树是唯一的。

证明二:

设T,T’为G的俩个最小生成树,设T的边集E(T)={e1,e2,...,em},T‘的边集E(T‘)={e‘1,e‘2,...,e‘m}。

设ek满足ek≠e‘k且k最小,由于所有边权值不同,不妨假设weight(ek)<weight(ek‘),则将ek加入到T‘,T‘中构成环,易知环中不包含e‘1,e‘2,...,e‘k-1(否则在T中有包含ek的环),将环中任意非ek边删掉后得到了权值更小的生成树,这与T‘为最小生成树相矛盾,故G最小生成树唯一。

还有一个更强的结论:同一个图不同最小生成树的边权重序列相同。

证明方法类似证明二,过程略复杂,不再赘述。

时间: 2024-12-18 18:01:08

所有边权均不相同的无向图最小生成树是唯一的证明的相关文章

1212 无向图最小生成树

1212 无向图最小生成树 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值.(1 <= S, E <= N,1 <= W <= 10

51Nod-1212 无向图最小生成树

51Nod: 1212 无向图最小生成树. link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1212 1212 无向图最小生成树 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M <

51nod1212无向图最小生成树

1212 无向图最小生成树 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值.(1 <= S, E <= N,1 <= W <= 

无向图最小生成树Kruskal算法

问题 最小生成树的Kruskal算法 描述:有A.B.C.D四个点,每两个点之间的距离(无方向)是(第一个数字是两点之间距离,后面两个字母代表两个点):(1,'A','B'),(5,'A','C'),(3,'A','D'),(4,'B','C'),(2,'B','D'),(1,'C','D') 生成边长和最小的树,也就是找出一种连接方法,将各点连接起来,并且各点之间的距离和最小. 思路说明: Kruskal算法是经典的无向图最小生成树解决方法.此处列举两种python的实现方法.这两种方法均参考

无向图最小生成树Prim算法

问题 无向图最小生成树的Prim算法.一般的实现过程,采用了常规排序.本文在用Python实现中,使用了python的堆排序模块,不仅精简代码,而且提高效率. 思路说明 假设点A,B,C,D,E,F,两点之间有连线的,以及它们的距离分别是:(A-B:7);(A-D:5);(B-C:8);(B-D:9);(B-E:7);(C-E:5);(D-E:15);(D-F:6);(E-F:8);(E-G:9);(F-G:11) 关于Prim算法的计算过程,参与维基百科的词条:[普里姆算法] 将上述点与点关系

51nod1212 无向图最小生成树(Prim)

题目描述: N个点M条边的有向连通图,每条边有一个权值,求该图的最小生成树. Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值.(1 <= S, E <= N,1 <= W <= 10000) OutPut 输出最小生成树的所有边的权值之和. Input示例 9 14 1 2 4 2 3 

图论 - 无向图最小生成树

N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值.(1 <= S, E <= N,1 <= W <= 10000) Output 输出最小生成树的所有边的权值之和. Input示例 9 14 1 2 4 2 3 8 3 4 

51Nod 1212无向图最小生成树

prim #include<stdio.h> #include<string.h> #define inf 0x3f3f3f3f int G[1001][1001]; int vis[1001],lowc[1001]; int prim(int G[][1001],int n){ int i,j,p,minc,res=0; memset(vis,0,sizeof(vis));//全部初值为0表示没有访问过: vis[1]=1; for(i=2;i<=n;i++) lowc[i

bzoj4419[SHOI2013]发微博

题意:给你一个初始没有边,点权均为0的无向图,三种操作:加边,删边,选择一个点将当前与之相邻的点(不包括自身)的点权+1,询问最后所有点的点权. 据说正解是set维护每个人的朋友,然后考虑每次加边.删边对答案的贡献......但作为脑子有坑的选手,我搞出了一个动态开点线段树....首先离线,分别考虑每条边对答案的贡献.不妨分别考虑这条边存在的每一个时间区间.那么我们只要知道这个时间区间中两个端点各进行了几次点权增加(发微博)操作就可以更新两边的答案.考虑对每一个点开一棵线段树,如果这个点在第i个