• L2-013 红色警报(Python3)


    战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。

    输入格式:

    输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一个正整数K和随后的K个被攻占的城市的编号。

    注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。

    输出格式:

    对每个被攻占的城市,如果它会改变整个国家的连通性,则输出Red Alert: City k is lost!,其中k是该城市的编号;否则只输出City k is lost.即可。如果该国失去了最后一个城市,则增加一行输出Game Over.

    输入样例:

    1. 5 4
    2. 0 1
    3. 1 3
    4. 3 0
    5. 0 4
    6. 5
    7. 1 2 0 4 3

    输出样例:

    1. City 1 is lost.
    2. City 2 is lost.
    3. Red Alert: City 0 is lost!
    4. City 4 is lost.
    5. City 3 is lost.
    6. Game Over.

    提交结果:

    代码(测试点2,测试点4运行超时):

    1. import sys
    2. def dfs(node):
    3. visit[node] = True
    4. for i in range(n):
    5. if visit[i] == False and e[node][i] == 1:
    6. dfs(i)
    7. def dfstrave():
    8. cnt = 0
    9. for i in range(n):
    10. visit[i] = False
    11. for i in range(n):
    12. if visit[i] == False:
    13. dfs(i)
    14. cnt += 1
    15. return cnt
    16. n, m = list(map(int, sys.stdin.readline().split()))
    17. visit = {}
    18. e = [[0 for _ in range(n)] for _ in range(n)]
    19. for i in range(m):
    20. a, b = list(map(int, sys.stdin.readline().split()))
    21. e[a][b] = 1
    22. e[b][a] = 1
    23. count = 0
    24. cnt = dfstrave()
    25. num = int(input())
    26. city = list(map(int, sys.stdin.readline().split()))
    27. for i in city:
    28. for j in range(n):
    29. if e[i][j] == 1:
    30. e[i][j] = 0
    31. e[j][i] = 0
    32. tempcnt = dfstrave()
    33. if tempcnt > cnt + 1:
    34. print("Red Alert: City {} is lost!".format(i))
    35. else:
    36. print("City {} is lost.".format(i))
    37. cnt = tempcnt
    38. count += 1
    39. if count == n:
    40. print("Game Over.")
  • 相关阅读:
    2024年浙大MBA项目必报名的三个理由
    C#高效查表算法及线性插值算法实例
    Linux用户
    yolo系列配置文件解析,内容来自官方
    zabbix集成openldap认证
    Flutter实践二:repository模式
    Vue框架学习(第十三课)Vuex状态管理中的store和state属性
    二分法-算法总结
    SpringBoot 使用JDBC
    每日一练6——C/C++不要二问题&&把字符串转换成整数问题
  • 原文地址:https://blog.csdn.net/weixin_55730361/article/details/126516826