Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions openjudge/24789/24789/2400010791.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 状态: [Accepted](http://dsbpython.openjudge.cn/dspythonbook/solution/49061552/)

```
基本信息
#:49061552
题目:P1290
提交人:2400010791 吏语涵
内存:17432kB
时间:204ms
语言:Python3
提交时间:2025-05-04 23:17:10
```

### 改进思路
#### 1.逐行读取输入
使用stdin.readline()逐行读取输入,减少内存占用
#### 2.按秩合并
恢复按秩合并策略,与路径压缩结合,使并查集操作更高效
#### 3.高效排序
使用 Python 内置的排序函数处理边列表,时间复杂度为 O (m log m)
#### 4.快速整数转换
直接在读取输入时进行整数转换,减少中间步骤


这些优化在保持算法正确性的同时,最大限度地减少了内存使用和提高了执行效率。对于大规模输入数据,这种实现方式能够更高效地处理。
43 changes: 43 additions & 0 deletions openjudge/24789/24789/2400010791.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import sys
from sys import stdin


def main():
n, m = map(int, stdin.readline().split())
sum_v = 0
edges = []

for _ in range(m):
x, y, v = map(int, stdin.readline().split())
sum_v += v
edges.append((v, x, y))

edges.sort()

parent = list(range(n))
rank = [1] * n

def find(u):
while parent[u] != u:
parent[u] = parent[parent[u]]
u = parent[u]
return u

min_span_sum = 0
for v, x, y in edges:
rx = find(x)
ry = find(y)
if rx != ry:
if rank[rx] > rank[ry]:
parent[ry] = rx
else:
parent[rx] = ry
if rank[rx] == rank[ry]:
rank[ry] += 1
min_span_sum += v

print(sum_v - min_span_sum)


if __name__ == "__main__":
main()