Kruskal算法求最小生成树(POJ2485)
题目链接:http://poj.org/problem?id=2485

#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h> using namespace std; #define inf 100000000
#define N 505
#define M N*N struct note {
int u,v;
int c;
note() {}
note(int u,int v,int c):u(u),v(v),c(c) {}
} p[M]; int e,n,m;
int father[N]; ///表示x的父亲的编号 void addnote(int u,int v,int c) {
p[e++]=note(u,v,c);
} int cmp(const void *a,const void *b) {
note *aa=(note *)a;
note *bb=(note *)b;
return aa->c-bb->c;
} ///初始化每个节点的祖先,即为独立的点
void set_clear() {
for(int i=; i<=n; i++)
father[i]=i;
} ///找到x的祖先。
int find(int x) {
if(x!=father[x])
father[x]=find(father[x]);
return father[x];
} int kruskal(int n) {
set_clear();
int m=; ///只要找n-1条边,就把图构成了
int ans=;
for(int i=; i<e; i++) {
int x=find(p[i].u);
int y=find(p[i].v);
if(x==y) continue; m++;
ans=p[i].c;
father[y]=x; ///father[y]的祖先改为x;合并两个不相交的集合
if(m==n-) break;
}
if(m<n-) return -;
else return ans;
} int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
e=; ///边的个数
for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
int c;
scanf("%d",&c);
addnote(i,j,c);
}
}
qsort(p,e,sizeof(p[]),cmp);
printf("%d\n",kruskal(n));
}
return ;
}
Kruskal算法求最小生成树(POJ2485)的更多相关文章
- 利用Kruskal算法求最小生成树解决聪明的猴子问题 -- 数据结构
题目:聪明的猴子 链接:https://ac.nowcoder.com/acm/problem/19964 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个 ...
- 克鲁斯卡尔(Kruskal)算法求最小生成树
/* *Kruskal算法求MST */ #include <iostream> #include <cstdio> #include <cstring> #inc ...
- Prim算法和Kruskal算法求最小生成树
Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...
- kruskal算法求最小生成树(jungle roads的kruskal解法)
注意: 注意数组越界问题(提交出现runtimeError代表数组越界) 刚开始提交的时候,边集中边的数目和点集中点的数目用的同一个宏定义,但是宏定义是按照点的最大数定义的,所以提交的时候出现了数组越 ...
- Prime算法 与 Kruskal算法求最小生成树模板
算法原理参考链接 ==> UESTC算法讲堂——最小生成树 关于两种算法的复杂度分析 ==> http://blog.csdn.net/haskei/article/details/531 ...
- Kruskal算法求最小生成树
Kruskal算法是根据权来筛选节点,也是采用贪心算法. /// Kruskal ///初始化每个节点为独立的点,他的祖先为自己本身 void made(int n) { ; i<=n; i++ ...
- 859. Kruskal算法求最小生成树(模板)
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给定一张边带权的无向图G=(V, E),其中V表示 ...
- Kruskal算法求最小生成树 笔记与思路整理
整理一下前一段时间的最小生成树的算法.(其实是刚弄明白 Kruskal其实算是一种贪心算法.先将边按权值排序,每次选一条没选过的权值最小边加入树,若加入后成环就跳过. 先贴张图做个示例. (可视化均来 ...
- AcWing 859. Kruskal算法求最小生成树 稠密图
//稠密图 #include <cstring> #include <iostream> #include <algorithm> using namespace ...
随机推荐
- 【ACM】蛇形填数 - 逻辑怪
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 1 ...
- flume failed to start agent because dependencies were not found in classpath
FLUME_CLASSPATH=/root/flume/lib/ copied comon jar files from hadoop folder to the flume folder. cp / ...
- Vue.js-----轻量高效的MVVM框架(五、计算属性)
#基础例子 <div id="dr01"> <h4>#基础例子</h4> <div> num01={{num01}}, num02= ...
- Mybatis学习笔记8 - resultMap自定义结果集映射规则
一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public ...
- java替换word
package demo; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExcept ...
- Murano Weekly Meeting 2015.11.04
Meeting time: 2015.November.4th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting sum ...
- (转)shell实例浅谈之产生随机数七种方法
一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...
- iscroll.js文档
iScroll是高性能的.小尺寸的.无依赖关系的.支持多平台的滑动JavaScript库. 当然,不只是scroll,还有滚动.缩放.平移.无限滚动.视差滚动等. 为了达到更好的新能,所以iScrol ...
- Ibatis.net 1.6.2 简单配置及Log4.Net日志记录
看似简单的Ibatis配置起来注意的地方还挺多.里面的设置及功能还算强大.昨晚配置了半宿,结果一运行还是各种错误.急的直冒汗.果断下载实例去研究.英文不好文档只能作为功能参考. 下面一步步进入Ibat ...
- 浅谈MVC基础
ASP.NET MVC :UI层框架 让我们的web开发又回到了本质:请求,处理,响应 MVC本身是一种思想,将程序分成三个模块 Model:模型 广义的说法(包含DAL BLL MODEL ...