結果
| 問題 |
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()