結果
問題 | No.30 たこやき工場 |
ユーザー | rpy3cpp |
提出日時 | 2015-08-08 15:34:32 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 35 ms / 5,000 ms |
コード長 | 1,679 bytes |
コンパイル時間 | 104 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-06-01 02:57:43 |
合計ジャッジ時間 | 1,346 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 31 ms
11,008 KB |
testcase_01 | AC | 31 ms
11,008 KB |
testcase_02 | AC | 31 ms
10,880 KB |
testcase_03 | AC | 31 ms
10,880 KB |
testcase_04 | AC | 31 ms
10,880 KB |
testcase_05 | AC | 31 ms
11,008 KB |
testcase_06 | AC | 31 ms
10,880 KB |
testcase_07 | AC | 30 ms
10,880 KB |
testcase_08 | AC | 32 ms
10,880 KB |
testcase_09 | AC | 31 ms
10,752 KB |
testcase_10 | AC | 35 ms
10,880 KB |
testcase_11 | AC | 31 ms
10,880 KB |
testcase_12 | AC | 31 ms
10,880 KB |
testcase_13 | AC | 32 ms
10,880 KB |
testcase_14 | AC | 32 ms
10,880 KB |
testcase_15 | AC | 32 ms
10,880 KB |
testcase_16 | AC | 32 ms
11,008 KB |
ソースコード
def read_data(): '''投入行列をmatとし、 mat[p][r] = q 製品 r を作るのに材料 p が q 個必要 ''' N = int(input()) M = int(input()) mat = [dict() for n in range(N)] matrev = [dict() for n in range(N)] for m in range(M): p, q, r = map(int, input().split()) mat[p - 1][r - 1] = q matrev[r - 1][p - 1] = q return N, mat, matrev def solve(N, mat, matrev): ''' topological sort して、dp で埋めていく。 外部から調達が必要なのは、原料が示されていないものになる。 ''' order = topological_sort(mat) qs = [0] * N qs[N-1] = 1 for product in order[::-1]: q0 = qs[product] for material, q in matrev[product].items(): qs[material] += q0 * q result = [(0 if matrev[i] else q) for i, q in enumerate(qs)] return result def topological_sort(Es): def bfs(s): nonlocal notyet, in_degree, result, Es que = [s] notyet[s] = False while que: u = que.pop() result.append(u) for v in Es[u]: in_degree[v] -= 1 if in_degree[v] == 0 and notyet[v]: notyet[v] = False que.append(v) N = len(Es) notyet = [True] * N in_degree = [0] * N result = [] for src, dsts in enumerate(Es): for dst in dsts: in_degree[dst] += 1 for u in range(N): if in_degree[u] == 0 and notyet[u]: bfs(u) return result N, mat, matrev = read_data() result = solve(N, mat, matrev) for q in result[:-1]: print(q)