【代码随想录算法训练营——Day58】图论——117.软件构建、47. 参加科学大会
卡码网题目链接
https://kamacoder.com/problempage.php?pid=1191
https://kamacoder.com/problempage.php?pid=1047
题解
117.软件构建
(拓扑排序)

代码是完全照着题解的代码写的.
47.参加科学大会
(最短路)

代码
#117.软件构建
from collections import defaultdict, deque
if __name__ == "__main__":n, m = map(int, input().split())inDegree = [0] * numap = defaultdict(list)result = []for _ in range(m):s, t = map(int, input().split())inDegree[t] += 1umap[s].append(t)queue = deque()for i in range(n):if inDegree[i] == 0:queue.append(i)while queue:cur = queue.popleft()result.append(cur)files = umap[cur]for j in files:inDegree[j] -= 1if(inDegree[j] == 0):queue.append(j)if len(result) == n:for i in range(n - 1):print(f"{result[i]} ", end = "")print(result[n - 1])else:print(-1)
#47.参加科学大会
if __name__ == "__main__":n, m = map(int, input().split())graph = [[float('inf')] * (n + 1) for _ in range(n + 1)]for i in range(m):s, e, v = map(int, input().split())graph[s][e] = vminDist = [float('inf')] * (n + 1)visited = [False] * (n + 1)start = 1end = nminDist[start] = 0for i in range(1, n + 1):minVal = float('inf')cur = 1for j in range(1, n + 1):if visited[j] == False and minDist[j] < minVal:minVal = minDist[j]cur = jvisited[cur] = Truefor j in range(1, n + 1):if visited[j] == False and graph[cur][j] != float('inf') and minDist[cur] + graph[cur][j] < minDist[j]:minDist[j] = minDist[cur] + graph[cur][j]if minDist[end] == float('inf'):print(-1)else:print(minDist[end])
