結果
問題 |
No.1316 Maximum Minimum Spanning Tree
|
ユーザー |
|
提出日時 | 2024-06-08 10:35:03 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,505 bytes |
コンパイル時間 | 620 ms |
コンパイル使用メモリ | 12,544 KB |
実行使用メモリ | 10,880 KB |
最終ジャッジ日時 | 2024-12-27 14:14:00 |
合計ジャッジ時間 | 5,367 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 4 |
other | WA * 78 |
ソースコード
def find(parent, i): if parent[i] == i: return i else: parent[i] = find(parent, parent[i]) return parent[i] def union(parent, rank, x, y): xroot = find(parent, x) yroot = find(parent, y) if rank[xroot] < rank[yroot]: parent[xroot] = yroot elif rank[xroot] > rank[yroot]: parent[yroot] = xroot else: parent[yroot] = xroot rank[xroot] += 1 def kruskal(N, edges_with_weights): result = [] i, e = 0, 0 parent = [] rank = [] for node in range(N): parent.append(node) rank.append(0) edges_with_weights.sort(key=lambda x: x[2]) while e < N - 1: if i >= len(edges_with_weights): return float('inf') u, v, w = edges_with_weights[i] i = i + 1 x = find(parent, u) y = find(parent, v) if x != y: e = e + 1 result.append((u, v, w)) union(parent, rank, x, y) return sum(weight for _, _, weight in result) def main(): N, M, K = map(int, input().split()) edges = [] for _ in range(M): a, b, c, d = map(int, input().split()) edges.append((a - 1, b - 1, c, d)) edges_with_weights = [(a, b, c) for (a, b, c, d) in edges] mst_weight = kruskal(N, edges_with_weights) score = K * mst_weight - sum(d * x for (_, _, x, d) in edges) print("Calculated MST Weight:", mst_weight) print("Calculated Score:", score) if __name__ == "__main__": main()