krusal算法无解析(周灵猪)
Kruskal算法的过程:
要套并查集
(1) 将全部边按照权值由小到大排序。
(2) 按顺序(边权由小到大的顺序)考虑每条边,只要这条边和我们已经选择的边不构成圈,就保留这条边,否则放弃这条边。
算法 成功选择(n-1)条边后,形成一棵最小生成树,当然如果算法无法选择出(n-1)条边,则说明原图不连通。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 100010, M = 300010, INF = 0x3f3f3f3f;
int n, m;
int p[N];
struct Edge
{
int a, b;
long long w;
bool operator<(const Edge& W) {
return w < W.w;
}
}edges[M];
int find(int x)
{
if (p[x] == x) return x;
else
return p[x] = find(p[x]);
}
void merge(int a, int b) {
int x = find(a);
int y = find(b);
if (x != y)
p[x] = y;
}
long long kruskal()
{
sort(edges, edges + m);
long long res = 0;
int cnt = 0;
for (int i = 0; i < m; i++)
{
int a = edges[i].a, b = edges[i].b;
long long w = edges[i].w;
a = find(a), b = find(b);
if (a != b)
{
merge(a, b);
res += w;
cnt++;//链接了的数
}
}
if (cnt < n - 1) return -1;
return res;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) p[i] = i;
for (int i = 0; i < m; i++)
{
int a, b;
long long w;
cin >> a >> b >> w;
edges[i] = { a,b,w };
}
cout << kruskal();
return 0;
}
求第k边
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 100010, M = 300010, INF = 0x3f3f3f3f;
int n, m, cnt;
int p[N], x[N], y[N];
double ans[N];
struct Edge
{int a, b;double w;bool operator<(const Edge& W) {return w < W.w;}}e[M];
double dis(int a, int b) {return sqrt((x[a] - x[b]) * (x[a] - x[b]) + (y[a] - y[b]) * (y[a] - y[b]));
}
int find(int x)
{if (p[x] == x) return x;elsereturn p[x] = find(p[x]);
}
void merge(int a, int b) {int x = find(a);int y = find(b);if (x != y)p[x] = y;
}
void kruskal()
{int tot = 0;for (int i = 1; i <= n; i++) {for (int j = 1 + i; j <= n; j++) {e[++tot].a = i;e[tot].b = j;e[tot].w = dis(i, j);}}sort(e + 1, e + 1 + tot);for (int i = 1; i <= tot; i++) {if (find(e[i].a) != find(e[i].b)) {merge(e[i].a, e[i].b);ans[++cnt] = e[i].w;}if (cnt == n) break;}printf("%.2lf", ans[cnt - m + 1]);}int main()
{cin >> n >> m;for (int i = 1; i <= n; i++) p[i] = i;for (int i = 1; i <= m; i++){int a, b;cin >> a >> b;x[i] = a, y[i] = b;}kruskal();return 0;
}
krusal算法无解析(周灵猪)相关推荐
- 蓝桥杯第十届省赛java组解析(灵能传输 四星难度,后缀表达式 两星难度)
第一题太简单懒得复制题目了 答案是:490 第二题: 试题 B: 不同子串 本题总分:5 分 [问题描述] 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aa ...
- adaboost算法java_Adaboost 算法实例解析
Adaboost 算法实例解析 1 Adaboost的原理 1.1 Adaboost基本介绍 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 ...
- 【算法大赛直播周】如何让人人都可以使用AI技术?北大崔斌教授亲解自动化机器学习
2020腾讯广告算法大赛已于近日落下帷幕(点击回顾),但算法研习之路永无止境.为了更好地推动前沿技术的分享和交流,持续助力产学研融合落地,腾讯广告特邀三位大赛顶级评委开启"2020腾讯广告算 ...
- 【算法大赛直播周】隐私保护与精准营销亦能兼得,“联邦广告”如何打破数据孤岛?
2020腾讯广告算法大赛已于昨天落下帷幕(点击回顾),但算法研习之路永无止境.为了更好地推动前沿技术的分享和交流,持续助力产学研融合落地,腾讯广告特邀三位大赛顶级评委开启"2020腾讯广告算 ...
- 工业级静默活体检测开源算法技术解析记录
工业级静默活体检测开源算法技术解析(小视科技分享) 视频链接: https://www.bilibili.com/video/BV1qZ4y1T7CH 相关背景 定义:无感鉴别镜头前人脸的真伪,人脸识 ...
- java语言麻将游戏代码_麻将游戏算法深入解析及实现代码
麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...
- 麻将游戏算法深入解析
以此文奠我那些年中无意删除而删除的代码工程,另:本工作室承接棋牌算法研发合作业务,有兴趣可联系本QQ:285421210或微信honghaier_game 欢迎加入红孩儿[麻将研发]群: 605024 ...
- C++麻将游戏算法深入解析
C++麻将游戏算法深入解析 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜爱的 ...
- 跳一跳j算法ava代码_麻将游戏算法深入解析及实现代码
麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...
最新文章
- 为什么ajax请求状态码为0,ajax请求状态码为0的解决办法
- 【重磅上线】思维导图工具XMind:ZEN基础问题详解合集
- CMD中使用attrib命令设置文件只读、隐藏属性详解
- AutoEncoder、RBM、DBM、DBN
- 微信小程序预览pdf功能实现
- Cryengine 3新的全局光照算法简介
- ROBOTS.TXT在SEO优化中的运用(ROBOTS.TXT SEO优化实战)
- 微信小程序官方demo下载地址
- c语言实验报告1.4.3,c语言实验报告实验三.doc
- 用c语言输出一个菱形
- EMC、EMI、ESD、EMS区别 最清晰的解释送给你
- HTML文本框边框宽度,如何设置文本框尺寸 word文本框怎么设置统一大小
- Windows网络共享方式
- 2023中国余热回收利用展览会盛装亮相北京
- JS最佳实践——红皮书
- 【3DFR Python】convertDepth2Normal:从深度图计算法向图
- arm 中的nor flash 和 nand flash
- 电影中牛掰的黑客技术,看这篇文章你就够了!
- 分布式计算的基本原理
- 通过插入脚注的方式引用参考文献。