結果
| 問題 |
No.298 話の伝達
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:39:34 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,185 bytes |
| コンパイル時間 | 233 ms |
| コンパイル使用メモリ | 82,072 KB |
| 実行使用メモリ | 56,000 KB |
| 最終ジャッジ日時 | 2025-04-15 22:41:29 |
| 合計ジャッジ時間 | 1,727 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 13 |
ソースコード
import sys
from collections import deque
def main():
N, M = map(int, sys.stdin.readline().split())
in_edges = [[] for _ in range(N)] # in_edges[B] contains list of (A, C)
adj = [[] for _ in range(N)] # adjacency list for topological sort (excluding edges to 0)
in_degree = [0] * N
for _ in range(M):
A, B, C = map(int, sys.stdin.readline().split())
in_edges[B].append((A, C))
if B != 0:
adj[A].append(B)
in_degree[B] += 1
# Topological sort starting from node 0
order = []
q = deque([0])
order.append(0)
while q:
u = q.popleft()
for v in adj[u]:
in_degree[v] -= 1
if in_degree[v] == 0:
q.append(v)
order.append(v)
# Calculate probabilities
prob = [0.0] * N
prob[0] = 1.0
for node in order[1:]: # skip 0 as it's already processed
product = 1.0
for (a, c) in in_edges[node]:
product *= (1.0 - prob[a] * (c / 100.0))
prob[node] = 1.0 - product
# Output with sufficient precision
print("{0:.10f}".format(prob[N-1]))
if __name__ == "__main__":
main()
lam6er