結果
問題 | No.1333 Squared Sum |
ユーザー |
![]() |
提出日時 | 2021-01-08 21:45:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 910 ms / 2,000 ms |
コード長 | 1,499 bytes |
コンパイル時間 | 462 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 153,492 KB |
最終ジャッジ日時 | 2024-11-16 12:06:29 |
合計ジャッジ時間 | 24,716 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 44 |
ソースコード
import sysread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesMOD = 1_000_000_007def bfs_tree(N, G, root=1):q = [root]parent = [0] * (N + 1)dist = [0] * (N + 1)for v in q:for w, cost in G[v]:if w == parent[v]:continuedist[w] = dist[v] + costparent[w] = vq.append(w)return parent, q, distdef main(N, G):parent, order, dist = bfs_tree(N, G)ans = 0# k 乗和dp_0 = [0] * (N + 1)dp_1 = [0] * (N + 1)dp_2 = [0] * (N + 1)dp = [0] * (N + 1) # lca ごとの答for v in order[::-1]:dp_0[v] += 1dp[v] += dp_2[v] * dp_0[v] * 2dp[v] += 2 * dp_1[v]**2dp_0[v] %= MODdp_1[v] %= MODdp_2[v] %= MODdp[v] %= MODp = parent[v]if p == 0:breakd = dist[v] - dist[p]dp[p] -= dp_0[v] * dp_2[v] * 2 + 4 * d * d * dp_0[v]**2dp[p] -= 2 * dp_1[v] * dp_1[v]dp[p] -= 8 * d * dp_0[v] * dp_1[v]dp_0[p] += dp_0[v]dp_1[p] += dp_1[v] + d * dp_0[v]dp_2[p] += dp_2[v] + 2 * d * dp_1[v] + d * d * dp_0[v]ans = sum(dp) % MODif ans & 1:ans += MODans //= 2return ansN = int(readline())G = [[] for _ in range(N + 1)]for line in readlines():a, b, c = map(int, line.split())G[a].append((b, c))G[b].append((a, c))print(main(N, G))