From ed35cf8be828f5303b79abe5d40c5d8e7efcdb01 Mon Sep 17 00:00:00 2001 From: 2400010791-L <3555712249@qq.com> Date: Tue, 3 Jun 2025 18:09:29 +0800 Subject: [PATCH] =?UTF-8?q?24789=20=E4=BB=A3=E7=A0=81=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openjudge/24789/24789/2400010791.md | 25 +++++++++++++++++ openjudge/24789/24789/2400010791.py | 43 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 openjudge/24789/24789/2400010791.md create mode 100644 openjudge/24789/24789/2400010791.py diff --git a/openjudge/24789/24789/2400010791.md b/openjudge/24789/24789/2400010791.md new file mode 100644 index 00000000..c6f6f3e5 --- /dev/null +++ b/openjudge/24789/24789/2400010791.md @@ -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.快速整数转换 +直接在读取输入时进行整数转换,减少中间步骤 + + +这些优化在保持算法正确性的同时,最大限度地减少了内存使用和提高了执行效率。对于大规模输入数据,这种实现方式能够更高效地处理。 \ No newline at end of file diff --git a/openjudge/24789/24789/2400010791.py b/openjudge/24789/24789/2400010791.py new file mode 100644 index 00000000..61109e5c --- /dev/null +++ b/openjudge/24789/24789/2400010791.py @@ -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() \ No newline at end of file