📅  最后修改于: 2023-12-03 15:07:33.494000             🧑  作者: Mango
在一个无向图中,给定节点总数和每个节点的度数,判断图是否连通。
第一行包含一个整数 $N$,表示节点的总数。
第二行包含 $N$ 个整数,表示每一个节点的度数。
如果给定的图是连通的,输出字符串 Yes
,否则输出字符串 No
。
4
1 2 2 3
Yes
对于一个连通的无向图,节点数 $N$ 和边数 $E$ 之间有一个关系:$E \ge \frac{(N-1) \times N}{2}$。如果给定的图的边数小于这个数,那么它一定不连通。
由于每个节点的度数已知,所以对于每一个节点 $i$,它与其他节点之间相连的边数不能多于它的度数。因此,我们可以遍历每一个节点,计算出它与其他节点之间的边数之和 $edge$,并与它的度数 $deg_i$ 进行比较,如果 $edge$ 小于 $deg_i$,则说明该节点未能与所有节点相连,因此,退出循环,输出 No
。
如果遍历完节点之后,没有退出循环,那么说明这个图是连通的,输出 Yes
。
n = int(input()) # 获取节点总数
degrees = list(map(int, input().split())) # 获取每个节点的度数
edge_count = sum(degrees) // 2 # 计算边数
if edge_count < (n - 1) * n // 2:
print("No") # 边数太少,不是连通图
else:
for i in range(n):
edges = sum(degrees) - degrees[i]
if edges < (n - 1): # 该节点的边数不足,不是连通图
print("No")
break
else:
print("Yes")
简要说明:
No
。No
,退出循环。如果全部节点都满足条件,则输出 Yes
。