博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小生成树 kruskal 并查集
阅读量:3898 次
发布时间:2019-05-23

本文共 849 字,大约阅读时间需要 2 分钟。

题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz

输入输出格式

输入格式:
第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)
接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi

输出格式:

输出包含一个数,即最小生成树的各边的长度之和;如果该图不连通则输出orz

输入输出样例

输入样例#1:
4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3
输出样例#1:
7

这段代码其实出现了一点小错误,但我实在不知道错在哪。。。

好吧,我后来修改了merge的代码,算是写对了

#include
#include
#include
using namespace std;//最小生成树之kruskal 也就是使用并查集//第一个是判断 边是否在同一个子集之中 第二个就是判断 边之间的合并int a[100]={
0};////再创建一个结构体数组来存储 起点,终点 和边的长度struct jj{
int x,y,z;}J[100];//写一个判断祖宗的方法int zuzong(int x){
if(a[x]==x) return x; else return zuzong(a[x]);}//写一个判断的方法bool check(int x,int y){
return zuzong(x)==zuzong(y);}//再写一个合并的方法void merge_1(int x,int y){
if(!check(x,y)) a[zuzong(x)]=zuzong(y);}//再写一个比较的方法,用边的长度作为比较对象bool cmp(jj x,jj y){
//名字要取好 return x.z

转载地址:http://ekfen.baihongyu.com/

你可能感兴趣的文章
C/C++内存泄漏及检测
查看>>
C中的继承和多态
查看>>
linux修改ssh端口和禁止root远程登陆设置
查看>>
What really happens when you navigate to a URL
查看>>
偶遇with ties
查看>>
linux 编译指定库、头文件的路径问题
查看>>
使用gdb调试运行时的程序小技巧
查看>>
linux后端服务程序之信号处理
查看>>
Padding也要小心
查看>>
linux异步IO编程实例分析
查看>>
小组开发环境搭建: apache+ftp+cvs+samba
查看>>
Learning C with gdb
查看>>
不可不知的json库
查看>>
JSON格式解析和libjson使用简介
查看>>
关于Json格式的理解
查看>>
c语言解析json数据
查看>>
json-c API总结
查看>>
freeBSD queue.c--定时器
查看>>
一个C实现的记日志的函数库
查看>>
C语言简单实现日志功能的的题目
查看>>