卡码网题目链接
https://kamacoder.com/problempage.php?pid=1191
https://kamacoder.com/problempage.php?pid=1047
题解
117.软件构建
(拓扑排序)

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

代码
python
#117.软件构建
from collections import defaultdict, deque
if __name__ == "__main__":
n, m = map(int, input().split())
inDegree = [0] * n
umap = defaultdict(list)
result = []
for _ in range(m):
s, t = map(int, input().split())
inDegree[t] += 1
umap[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] -= 1
if(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)
python
#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] = v
minDist = [float('inf')] * (n + 1)
visited = [False] * (n + 1)
start = 1
end = n
minDist[start] = 0
for i in range(1, n + 1):
minVal = float('inf')
cur = 1
for j in range(1, n + 1):
if visited[j] == False and minDist[j] < minVal:
minVal = minDist[j]
cur = j
visited[cur] = True
for 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])