結果
| 問題 |
No.30 たこやき工場
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:36:26 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 54 ms / 5,000 ms |
| コード長 | 2,374 bytes |
| コンパイル時間 | 342 ms |
| コンパイル使用メモリ | 82,308 KB |
| 実行使用メモリ | 67,048 KB |
| 最終ジャッジ日時 | 2025-03-31 17:36:58 |
| 合計ジャッジ時間 | 1,593 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
import sys
from collections import defaultdict, deque
def main():
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
manufacture = defaultdict(list) # R -> list of (P, Q)
dependencies = defaultdict(list) # adjacency list for the graph. p → r edges.
indegree = [0] * (n + 1) # 1-based indexing
for _ in range(m):
p, q, r = map(int, sys.stdin.readline().split())
manufacture[r].append((p, q))
dependencies[p].append(r) # p is needed for r, so edge p → r
indegree[r] += 1 # increment in-degree of r
# Compute topological order
queue = deque()
topo_order = []
# Initialize queue with nodes having in-degree 0
for node in range(1, n + 1):
if indegree[node] == 0:
queue.append(node)
while queue:
u = queue.popleft()
topo_order.append(u)
for v in dependencies[u]:
indegree[v] -= 1
if indegree[v] == 0:
queue.append(v)
# Process in reverse topological order
reversed_order = reversed(topo_order)
required = [0] * (n + 1)
required[n] = 1 # need to produce 1 of product N
S = [0] * (n - 1) # S[0] is product 1, ..., S[n-2] is product N-1
for i in reversed_order:
if i in manufacture:
for (p, q) in manufacture[i]:
required[p] += required[i] * q
if i < n:
# Check if the product has manufacturing methods. If not, add to S.
# If it has manufacturing methods, then it's processed in the above loop.
# So, we need to check if i has any manufacturing methods.
if i not in manufacture:
S[i - 1] += required[i]
# For products that have manufacturing methods, their required is already propagated.
# So, S[i-1] should be 0 if they have any manufacture.
# However, for products with manufacture, their required is propagated, so their own required[i] is not part of S.
# So, the code above adds to S only if i is in 1..N-1 and not in manufacture.
# Now, for products that are in manufacture but their required is calculated via dependencies,
# The required[i] is already propagated to their materials. So, those products are considered as manufactured, not bought.
for val in S:
print(val)
if __name__ == "__main__":
main()
lam6er