当前位置: 首页 > news >正文

最小生成树 kruskal算法

一个贪心算法,先排序,然后从小到大开始选边;
同时用并查集来维护两个点是否连通,如果当前边连接的两个点已经连通,那么说明选这条边没有任何意义,一定是劣的(因为前面已经排了序)

#include<bits/stdc++.h>
using namespace std;
const int N = 5005;
const int M = 2e5 + 5;
int n, m, f[N], ans;
struct Edge{int u, to, v;
}edge[M];
int find(int x){if(f[x] == x) return x;return f[x] = find(f[x]);
}
bool cmp(Edge a, Edge b){return a.v < b.v;
}
void kruskal(){int cnt = 0;sort(edge + 1, edge + 1 + m, cmp);for(int i = 1; i <= m; i++){int fu = find(edge[i].u);int ft = find(edge[i].to);if(fu == ft) continue;ans += edge[i].v;f[fu] = ft;cnt++;if(cnt == n-1) break;}if(cnt != n-1) ans = 0x3f3f3f3f;
}
int main(){cin >> n >> m;for(int i = 1; i <= m; i++){cin >> edge[i].u >> edge[i].to >> edge[i].v;}for(int i = 1; i <= n; i++) f[i] = i;kruskal();if(ans == 0x3f3f3f3f) cout << "orz";else cout << ans;return 0;
}
http://www.hskmm.com/?act=detail&tid=38397

相关文章:

  • 【Java】Synchronized-你知道Java是如何上锁的吗?
  • Java中的字符串及相关类的介绍
  • ABP - 工作单元(Unit of Work)[UnitOfWorkAttribute、IUnitOfWorkManager、UnitOfWorkOptions]
  • LeetCode刷题笔记
  • [NOIP2023] 双序列拓展 题解
  • 洛谷 P9530 Fish 2
  • 洛谷 P7011 Escape
  • 你可以把它喂给AI让AI猜猜我在干什么
  • 【深入浅出Nodejs】异步非阻塞IO
  • 135. 分发糖果
  • 【Java-JMM】Happens-before原则
  • P6072 『MdOI R1』Path
  • P1601题解
  • 10-23 好题选讲总结
  • 关于驻马店市 2025 中小学信息学竞赛的记录(入门级)(未完)
  • 关于Markdown的使用
  • 自定义Spring Cloud LoadBalancer实践
  • 游记——驻马店市2025中小学信息学竞赛(未完)
  • 线段树上二分
  • ABP - SqlSugar [SqlSugarModule、ISqlSugarClient、SqlSugarRepository]
  • Odoo18.0 对接 京东快递
  • SAP折旧模拟超过1000条资产dump问题及解决
  • [python] 代码性能分析工具line_profiler使用指北
  • react的diff算法
  • LLM学习记录DAY11
  • ABP - 当前用户 [ICurrentUser、CurrentUser]
  • 轮次检测模型 VoTurn-80M 开源,多模态融合架构;OpenAI 收购桌面助手 Sky:实时识别屏幕自然语言交互丨日报
  • 第4天(中等题 滑动窗口、哈希表)
  • 幂函数
  • ABP - 依赖注入和属性注入