結果
| 問題 | No.30 たこやき工場 |
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2026-10-29 02:05:30 |
| 言語 | PyPy3 (8.0.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 82 ms / 5,000 ms |
| + 99µs | |
| コード長 | 1,044 bytes |
| 記録 | |
| コンパイル時間 | 85 ms |
| コンパイル使用メモリ | 64,572 KB |
| 実行使用メモリ | 63,000 KB |
| 最終ジャッジ日時 | 2026-10-29 02:05:43 |
| 合計ジャッジ時間 | 2,236 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 |
ソースコード
from collections import defaultdict
from atcoder.scc import SCCGraph
def scc(n: int, adj: dict[int, list[int]]) -> list[list[int]]:
"""グラフを強連結成分分解する。
Args:
n: 頂点数
adj: 隣接リスト {u: [v...]}
Returns:
強連結成分のリスト (トポロジカル順)
"""
g = SCCGraph(n)
for u, vs in adj.items():
for v in vs:
g.add_edge(u, v)
return g.scc()
N = int(input())
M = int(input())
xs = []
r_adj = defaultdict(list)
rw_adj = defaultdict(list)
indegs = [0] * N
for _ in range(M):
# P --(Q)--> R
P, Q, R = map(int, input().split())
P -= 1
R -= 1
indegs[R] += 1
r_adj[R].append(P)
rw_adj[R].append((P, Q))
cc = scc(N, r_adj)
scores = [0] * N
scores[N-1] = 1
for g in cc:
for v in g:
for to, w in rw_adj[v]:
scores[to] += scores[v] * w
starts = {i for i in range(N) if indegs[i] == 0}
for i in range(N-1):
if i in starts:
print(scores[i])
else:
print(0)
norioc