結果
| 問題 |
No.30 たこやき工場
|
| コンテスト | |
| ユーザー |
nagitaosu
|
| 提出日時 | 2020-03-13 16:42:19 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 37 ms / 5,000 ms |
| コード長 | 1,868 bytes |
| コンパイル時間 | 143 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-12-21 05:29:51 |
| 合計ジャッジ時間 | 1,470 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#!/usr/bin/env python3
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
from collections import deque
class DirectedGraph:
def __init__(self, adj):
self.n = len(adj)
self.adj = adj
self.is_asyclic = False
self.max_path_len = None
def topological_sort(self):
indegree = [0] * self.n
for vs in self.adj:
for dest, c in vs:
indegree[dest] += 1
zero_v = []
for v, indeg in enumerate(indegree):
if indeg == 0:
zero_v.append(v)
max_path_len = 1
tp_sorted = []
to_be_added = []
while True:
while zero_v:
v = zero_v.pop()
tp_sorted.append(v)
for dest, c in self.adj[v]:
indegree[dest] -= 1
if indegree[dest] == 0:
to_be_added.append(dest)
if len(to_be_added) > 0:
zero_v.extend(to_be_added)
to_be_added = []
max_path_len += 1
else:
break
if len(tp_sorted) == self.n:
self.is_asyclic = True
self.max_path_len = max_path_len
return tp_sorted
else:
self.is_asyclic = False
return None
n = int(input())
m = int(input())
edge = [[] for _ in range(n)]
for _ in range(m):
p, q, r = [int(item) for item in input().split()]
p -= 1; r -= 1
edge[r].append((p, q))
DG = DirectedGraph(edge)
ret = DG.topological_sort()
ans = [0] * n
ans[-1] = 1
visited = set()
for v in ret:
visited.add(v)
dest = True
for nv, c in edge[v]:
if nv in visited:
continue
ans[nv] += ans[v] * c
dest = False
if not dest:
ans[v] = 0
for item in ans[:-1]:
print(item)
nagitaosu