def main(N, M):
rootFlag = [None for i in range(N+1)] # None表示未修路,-1表示根节点
for i in range(M):
cityA, cityB = map(int,input().split())
if cityA == cityB:
if rootFlag[cityA] == None:
rootFlag[cityA] = -1
elif rootFlag[cityA] == None == rootFlag[cityB]:
rootFlag[cityA], rootFlag[cityB] = -1, cityA
elif rootFlag[cityA] == None: # A是None, B是数字
rootFlag[cityA] = getRoot(rootFlag, cityB)
elif rootFlag[cityB] == None: # B是None, A是数字
rootFlag[cityB] = getRoot(rootFlag, cityA)
else: # AB都是数字
rootA, rootB = getRoot(rootFlag, cityA), getRoot(rootFlag, cityB)
if rootFlag[cityA] != -1:
rootFlag[cityA] = rootA
if rootFlag[cityB] != -1:
rootFlag[cityB] = rootB
if rootA != rootB:
rootFlag[rootB], rootFlag[cityB] = rootA, rootA
numNone = rootFlag[1:N+1].count(None)
numRoot = rootFlag[1:N+1].count(-1)
print(numNone+numRoot-1)
def getRoot(rootFlag, city):
p = city
while rootFlag[p] != -1:
p = rootFlag[p]
return p
if __name__ == "__main__":
try:
while True:
line = input().strip()
if line == '0':
break
else:
N, M = map(int,line.split())
main(N, M)
except:
pass
KY126 畅通工程
最新推荐文章于 2024-07-12 16:16:27 发布