結果
問題 | No.30 たこやき工場 |
ユーザー |
|
提出日時 | 2024-02-29 15:58:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 62 ms / 5,000 ms |
コード長 | 2,511 bytes |
コンパイル時間 | 212 ms |
コンパイル使用メモリ | 82,344 KB |
実行使用メモリ | 72,008 KB |
最終ジャッジ日時 | 2024-09-29 12:43:43 |
合計ジャッジ時間 | 1,698 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 17 |
ソースコード
import sysimport mathimport bisectfrom heapq import heapify, heappop, heappushfrom collections import deque, defaultdict, Counterfrom functools import lru_cachefrom itertools import accumulate, combinations, permutations, productsys.setrecursionlimit(1000000)MOD = 10 ** 9 + 7MOD99 = 998244353input = lambda: sys.stdin.readline().strip()NI = lambda: int(input())NMI = lambda: map(int, input().split())NLI = lambda: list(NMI())SI = lambda: input()SMI = lambda: input().split()SLI = lambda: list(SMI())EI = lambda m: [NLI() for _ in range(m)]from collections import dequedef topological_sort(graph):"""BFSによるトポロジカルソート O(V+E):param graph: 隣接リスト:return: 長さnならトポソ可能、そうでなければサイクルあり"""n = len(graph)dims = [0] * nfor i, adj in enumerate(graph):for goto in adj:dims[goto] += 1que = deque()for i, d in enumerate(dims):if d == 0:que.append(i)res = []while que:now = que.popleft()res.append(now)for goto in graph[now]:dims[goto] -= 1if dims[goto] == 0:que.append(goto)return resdef adjlist(n, edges, directed=False, in_origin=1):if len(edges) == 0:return [[] for _ in range(n)]weighted = True if len(edges[0]) > 2 else Falseif in_origin == 1:if weighted:edges = [[x-1, y-1, w] for x, y, w in edges]else:edges = [[x-1, y-1] for x, y in edges]res = [[] for _ in range(n)]if weighted:for u, v, c in edges:res[u].append([v, c])if not directed:res[v].append([u, c])else:for u, v in edges:res[u].append(v)if not directed:res[v].append(u)return resdef main():N = NI()M = NI()PR = []RP = []Q = {}for _ in range(M):p, q, r = NMI()p -= 1r -= 1PR.append([p, r])RP.append([r, p])Q[(p, r)] = qG = adjlist(N, PR, directed=True, in_origin=0)RG = adjlist(N, RP, directed=True, in_origin=0)topo = topological_sort(G)X = [0] * NX[N-1] = 1for r in topo[::-1]:for p in RG[r]:X[p] += X[r] * Q[(p, r)]if RG[r]:X[r] = 0for x in X[:-1]:print(x)if __name__ == "__main__":main()