(poj 2377)Kruskal算法 最大生成树

最大生成树Kruskal 题目大意:Bessie要在John的N个谷仓之间修路,John要求用尽可能少的路使得所有谷仓都能 联通,并且总距离最短,但是他又不想给Bessie钱。Bessie已经意识到John可能不给他钱,所 以他就想把这个工程做的最糟糕并且不让John发现。他决定用尽可能少的路使得所有谷仓都能 联通,但是要使总距离尽可能长。求这个可能的总距离。如果不能使得所有谷仓都联通,则输 出"- 阅读详情

这道题只是一道模板题,感到唯一的坑点就是n,m容易打错,一定要注意结构体要开到Max(M)+n; 之前便是因为这个地方Runtime Error了两次;顺便注意最后输出的答案 为long long型

Kruskal算法通过把所有的边从小到大排列后,不断取权值最小的边加入最小生成树(起初可能是离散的多个树,最终连成一个整体),并通过并查集来舍弃形成回路的边。

题目

**Description
Bessie has been hired to build a cheap internet network among Farmer John’s N (2 <= N <= 1,000) barns that are conveniently numbered 1…N. FJ has already done some surveying, and found M (1 <= M <= 20,000) possible connection routes between pairs of barns. Each possible connection route has an associated cost C (1 <= C <= 100,000). Farmer John wants to spend the least amount on connecting the network; he doesn’t even want to pay Bessie.
Realizing Farmer John will not pay her, Bessie decides to do the worst job possible. She must decide on a set of connections to install so that (i) the total cost of these connections is as large as possible, (ii) all the barns are connected together (so that it is possible to reach any barn from any other barn via a path of installed connections), and (iii) so that there are no cycles among the connections (which Farmer John would easily be able to detect). Conditions (ii) and (iii) ensure that the final set of connections will look like a “tree”.
Input

  • Line 1: Two space-separated integers: N and M
  • Lines 2…M+1: Each line contains three space-separated integers A, B, and C that describe a connection route between barns A and B of cost C.
    Output
  • Line 1: A single integer, containing the price of the most expensive tree connecting all the barns. If it is not possible to connect all the barns, output -1.
    Sample Input
    5 8
    1 2 3
    1 3 7
    2 3 10
    2 4 4
    2 5 8
    3 4 6
    3 5 2
    4 5 17
    Sample Output
    42
    Hint
    OUTPUT DETAILS:
    The most expensive tree has cost 17 + 8 + 10 + 7 = 42. It uses the following connections: 4 to 5, 2 to 5, 2 to 3, and 1 to 3.**

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100+20000;
struct Node
{
    int a;
    int b;
    long long price;
}s[N];
int ran[N];
int uset[N];
bool cmp(struct Node a,struct Node b)  //按权值由大到小排序
{
    return a.price>b.price;
}
void makeset(int n)   //并查集初始化
{
    for(int i=1;i<=n;i++)
        uset[i]=i,ran[i]=0;
}
int find(int x)   // 循环实现路基压缩
{
    int r=x,t;
    while(r!=uset[r])
       r=uset[r];
    while(x!=r)
    {
        t=uset[x];
        uset[x]=r;
        x=t;
    }
    return x;
}
/*int find(int x)
{
    if(x!=uset[x])
        uset[x]=find(uset[x]);
    return uset[x];
}*/    //递归实现路径压缩
void unionset(int x,int y)   //按秩合并
{
    int  a=find(x),b=find(y);
    if(a==b)
        return ;
    if(ran[a]>ran[b])
        uset[b]=a;
    else
    {
        if(ran[a]==ran[b])
            ran[b]++;
        uset[a]=b;
    }
}
long long Kruskal(int n,int m)  //Kruskal生成最小生成树
{
    int i,nedge=0; //nedge 记录边的数量 最大为谷仓总数减1 为n-1
    long long res=0;
    sort(s+1,s+1+m,cmp);
    for(i=1;i<=m&&nedge!=n-1;i++)
    {
        if(find(s[i].a)!=find(s[i].b))
        {
            unionset(s[i].a,s[i].b);
            res+=s[i].price;
            nedge++;
        }
    }
    if(nedge<n-1)
        res=-1;
    return res;
}
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        long long ans=0;
        for(int i=1;i<=m;i++)
            scanf("%d%d%lld",&s[i].a,&s[i].b,&s[i].price);
        makeset(n);
        ans=Kruskal(n,m);
        cout<<ans<<endl;
    }
    return 0;
}
最大生成树-C++代码程序 以模糊图为基础图,生成最大树。 从某一个定点出发,按μ从大到小的顺序依次 画边,要求不产生回路(即圈),直到所有顶点都连通为止。构造的一个特殊的图,称为最大树。 立即下载

相关推荐

最大(最小)权重生成树(有向):为了学习“有向最大生成树”,这里实现了 Chu-Liu/Edmonds 算法。-matlab开发

我们使用 Chu-Liu/Edmonds 算法的思想,见论文 [1,2],在这里实现四个功能。 1.最大有向最大生成树通过 DirectedMaximumSpanningTree.m 2. 最小有向最大生成树作者:DirectedMinimalSpanningTree.m 3.最大有向最大生成森林作者:MaximalDirectedMSF.m 4. 最小有向最大生成森林由 MinimalDirectedMSF.m 可以从“ControlCenter.m”开始,这里是一个简单的例子和​​如何使用代码的解释。 对于高级用户,我也通过mex编程改进了代码,它能够处理数据集中超过1000个变量,检查名为:AdvanceUser的折叠如果有任何问题,请告诉我,我会尽快帮助您。 注意:mex 编译器应该在你的 matlab 中准备好了。 [1] YJ Chu 和 TH Liu,“关于有向图的最短

最大生成树

前言: 最大生成树算法和最小生成树算法几乎一样,只需要我们把最小生成树算法进行一点点改变即可。 当你用Krushal算法求最小生成树的时候,每一次选取的边都是最小的边,然后再去判断这条边是否可以加入最小生成树; 那么当你每一次选择的边是最大的边,然后再去判断这条边是否可以加入,那么这就是最大生成树的求取方法了; 例子: ...

titi2018815的博客 1万+

K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

分类知识   分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中。机器学习中常见的分类算法有:SVM(支持向量机)、KNN(最邻近法)、Decision Tree(决策树分类法)、Naive Bayes(朴素贝叶斯分类)、Neural Networks(神经网络法)等。   但当对海量数据进行分类时,为了降低数据满足分类算法要求所需要的预处理代价,往往需要选...

zhf的博客 1万+

生成树算法

最小生成树介绍一、prim算法二、Kruskal 算法 介绍 我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 注意:只有连通图才有生成树,而对于非连通图,只存在生成森林(好多生成树!)。 图的形式不唯一,但是保证边权和最小!! 一、prim算法 基于邻接矩阵的算法,对于密集图更为方便,且复杂度达到O(N*N),且受到邻接矩阵特性的时间空间限制 记录当前在树上的所有点,并维护该树(联通块)对外界的所有边的权值dist [ x ] 增边:每.

qq_42852687的博客 3188

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5722

高速窄脉冲峰值保持设计

一、目的 在激光探测领域,探测器发出的高速窄脉冲,单片机AD进行采样,很难捕捉到窄脉冲的幅值,即使使用高速AD进行采样,也存在一定的难度。因此,本方案设计了一种高速窄脉冲峰值保持电路,有助于单片机AD采样能很好的捕捉到脉冲幅值。 二、方案分析与比较 峰值保持器一般分为两种:电压型和跨导型。 方案一:电压型峰值保持器,由电压型运放、二极管、保持电容、缓冲器组成,优点是元件成本低,缺点是峰值保持存在过...

weixin_43184208的博客 9288

Bad Cowtractors POJ - 2377(Kruskal算法+最大生成树)

题目: Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ has already done some surveying, and found M (1...

titi2018815的博客 267

网络虚拟化介绍(OVS、DVS)

网络虚拟化概念网络虚拟化就是把网络层的一些功能从硬件中剥离出来,建立新的网络虚拟层;该虚拟层可以接管网络服务和配置,实现网络服务与物理层的解耦,打破物理资源限制;通过网络虚拟层能够在一个物理网络上模拟出多个逻辑网络,并且多用户在逻辑网络上相互隔离,保证网络安全网络虚拟化的特点隔离性:不同租户的流量相互之间不能互访;但是IP/MAC地址都可以独立规划可移动性:虚拟机可以跨二层/三层迁移,甚至可以跨广域网迁移(迁移前后虚拟机Vlan和IP地址都不会发生变化)可扩展性:逻辑网络的规模和数量可扩展。

m0_49864110的博客 1万+

POJ2377 Bad Cowtractors【Kruskal算法+并查集+最大生成树】

Bad CowtractorsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 17907 Accepted: 7237DescriptionBessie has been hired to build a cheap internet network among Farmer John's N (2 &lt;= N &lt;= 1...

海岛Blog 880

【华为OD机试真题】459、小扇和小船的数字游戏、数字游戏 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)

### 🎃题目描述 >小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数 n(1  现在求 m 的最小值

KJ.JK 1717

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 992

【MST-Kruskal】POJ 2377 Bad Cowtractors

POJ 2377 Bad Cowtractors #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cmath> #include <cstring> #include <string> #in...

L_X_ 173

【异常】插入Milvus时出现无法插入的情况提示io.milvus.exception.ParamException: The field: meta is not provided.

在使用 Milvus 进行向量搜索时遇到 io.milvus.exception.ParamException: The field: meta is not provided 错误通常意味着在创建集合(Collection)或者插入数据(Insert)时,某些必需的元数据字段没有被正确提供。检查集合创建,确保在创建集合时,你已经定义了所有必需的字段,并且正确地使用了 SchemaField 来定义这些字段。例如,如果你在创建集合时没有正确设置元数据字段,就会出现这个错误。请严格按照这个表结构创建。

奶爸的编程之路,也就一周冷个三天 923

POJ 2377 Bad Cowtractors(最大生成树)

POJ 2377 Bad Cowtractors(最大生成树) http://poj.org/problem?id=2377 题意:        给你一个N个点和M条边的无向图,要你输出该图的最大生成树的权值.如果不存在最大生成树,则输出-1. 分析:        由于本题求得是最大生成树,所以kruskal算法中我们从最大的边长开始选边即可. AC代码: #include #i

code 1328

智能生活中枢:基于 ESP32-S3 的桌面智能助手与日程提醒终端设计与实现

本文完成了基于 ESP32-S3 的桌面智能助手与日程提醒终端的完整设计,实现了时间同步、日程管理、声光提醒、环境监测、本地存储等核心功能。硬件接线简洁、软件逻辑清晰,可直接制作成品使用。硬件方案:以 ESP32-S3 为核心,搭配 OLED、DS3231、DHT11、按键、声光模块,接线标准化、易复刻;软件方案:基于 Arduino 开发,提供标准 Mermaid 软件流程图,代码模块化、可直接编译运行;核心功能:网络授时、本地日程管理、掉电存储、声光提醒、温湿度监测,满足桌面智能助手全场景需求。

weixin_42300449的博客 208

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最大生成树+图的连通性

POJ 2377   此题为最大生成树问题,与最小生成树类似.采用kruskal()算法   最小生成树是将边从小到大排序,此题只要将边从大到小排序就ok了,    考虑到重边的存在,用prim()算法的话可能会出错;   另外,由于我没完整看完题意,没有发现还要判断图是否连通,不连通时要输出-1,导致wa了一次.   对于连通性的判断,由于前面已经用过并查集了,只需要将任意一个顶点...

weixin_30925411的博客 148

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ 2377 Bad Cowtractors 最小生成树 Kruskal

题目链接: POJ 2377 Bad Cowtractors 题目分析: 应该是求最大生成树,和最小生成树一样滴~ 我用的Kruskal+并查集,Prim+堆应该也可以的 Problem: 2377 User: ChenyangDu Memory: 464K Time: 47MS Language

ChenyangDu的博客 393

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

poj 2377 Bad Cowtractors

最大生成树

GadyPu的专栏 308

poj2377 最大生成树 Kruskal

Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ has already done some surveying, and found M

fanesemyk的博客 440

poj 2377最大生成树 Kruskal

点击打开链接 #include #include using namespace std; const int M = 21010; struct edge{ int u; int v; long long cost; bool operator <(const edge &t)const { return cost>t.cost; } }e[M]; int n,m,fa[

Masamiiiiii 407

POJ 2377 最大生成树(prim,kruskal)

题目:http://poj.org/problem?id=2377 最大生成树,改一改prim即可,把大小换一换,最初graph都fill为-1。 POJ就好搞一些无聊的重边,要把最大的数据放入graph。 #include #include #include #include #include #include using namespace std; const int maxn=10

智浩的博客 1395

POJ--2377--Kruskal()生成树模板

Kruskal()生成树模板: //改进一下,适合一最小最大生成树 #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int MAX_E=20100;//注意范围一定要开大 struct edge{ int u,v; long long ...

queque_heiya的博客 320

poj2377 Bad Cowtractors(最大生成树的Prim和Kruskal做法)

http://poj.org/problem?id=2377 题意:约翰雇Bessie来在自己的仓库之间设计一个通路网络,约翰已经找出仓库之间修路的成本,要求做一个最小成本的通路网络。但是这货居然不想给钱,Bessie就看这智障不爽了,反正不给钱,索性给你设计个成本最大的网络,忙活去吧= =,求最大网络的成本。 思路:最大生成树。这题n的数量不是很大,所以用两种做法都做了一下。Pr

Iguodala的博客 497

POJ 2377 Bad Cowtractors 最大生成树 Kruskal

Description Bessie has been hired to build a cheap internet network among Farmer John’s N (2 <= N <= 1,000) barns that are conveniently numbered 1…N. FJ has already done some surveying, and fou...

RPG_Zero的博客 267
上一篇: 最小生成树 Kruskal(克鲁斯卡尔)算法
下一篇: (POJ 1258)Prim算法 最小生成树
Puppet__
博客等级 码龄9年 319粉丝 328原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值