day_58

117. 软件构建

from collections import deque, defaultdict

def main():
    n, m = map(int, input().split())
    umap = defaultdict(list)
    inn = [0] * n 
    for _ in range(m):
        s, t = map(int, input().split())
        umap[s].append(t)
        inn[t] += 1 
    
    que = deque([i for i in range(n) if inn[i] == 0])
    res = []
    while(que):
        cur = que.popleft()
        res.append(cur)
        for file in umap[cur]:
            inn[file] -= 1 
            if inn[file] == 0:
                que.append(file)
    if len(res) == n:
        print(' '.join(map(str, res)))
    else:
        print(-1)
    

if __name__ == '__main__':
    main()

47. 参加科学大会(第六期模拟笔试)


def main():
    n, m = map(int, input().split())
    grid = [[float('inf')] * (n + 1) for _ in range(n + 1)]
    for _ in range(m):
        s, t, w = map(int, input().split())
        grid[s][t] = w 
    
    minDist = [float('inf')] * (n + 1)
    visited = [False] * (n + 1)
    
    minDist[1] = 0
    for i in range(1, n + 1):
        # 找到距离源点最近且没有被访问过的
        minVal = float('inf')
        cur = -1
        for j in range(1, n + 1):
            if not visited[j] and minDist[j] < minVal:
                minVal = minDist[j]
                cur = j 
        if cur == -1:
            break
        visited[cur] = True
        # 更新节点到源点距离
        for j in range(1, n + 1):
            if not visited[j] and grid[cur][j] != float('inf') and minDist[cur] + grid[cur][j] < minDist[j]:
                minDist[j] = minDist[cur] + grid[cur][j]
    if minDist[-1] == float('inf'):
        print(-1)
    else:
        print(minDist[n])

if __name__=='__main__':
    main()

可以呀,还算容易理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值