SOJ2198 Highways 最小生成树 kruskal算法
第一次写博客
最小生成树入门题 附上链接
http://cstest.scu.edu.cn/soj/problem.action?id=2198
这是一道kruskal的模板题(刘汝佳的小白书——《算法竞赛与入门经典》上有基本一模一样的代码)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <string> 6 #include <iterator> 7 #include <algorithm> 8 #include <cstdlib> 9 #include <deque> 10 #include <queue> 11 #include <stack> 12 #include <map> 13 #include <vector> 14 #include <set> 15 #include <list> 16 using namespace std; 17 #define PI acos(-1.0) 18 #define INF 0x3f3f3f3f 19 #define MAX 1000005 20 #define MST(a,b) memset(a,b,sizeof(a)) 21 #define MOD 1000000007 22 #define EPS 1e-6 23 typedef long long LL; 24 typedef unsigned long long LLU; 25 int n,t; 26 int p[MAX],r[MAX],u[MAX],v[MAX],w[MAX];; 27 int cmp(const int i,const int j) { 28 return w[i] < w[j]; 29 } 30 int find(int x) { 31 return p[x] == x ? x : p[x] = find(p[x]); 32 } 33 int kruskal() { 34 int ans = 0; 35 for(int i = 0;i < n;i ++) 36 p[i] = i; 37 for(int i = 0;i < t;i ++) 38 r[i] = i; 39 sort(r,r + t,cmp); 40 for(int i = 0;i < t;i ++) { 41 int e = r[i]; 42 int x = find(u[e]); 43 int y = find(v[e]); 44 if(x != y) { 45 ans = max(ans,w[e]); 46 p[x] = y; 47 } 48 } 49 return ans; 50 } 51 int main() { 52 int cases; 53 scanf("%d",&cases); 54 while(cases --) { 55 t = 0; 56 scanf("%d",&n); 57 for(int i = 0;i < n;i ++) { 58 for(int j = 0;j < n;j ++) { 59 int tmp; 60 scanf("%d",&tmp); 61 if(j > i) { 62 u[t] = i; 63 v[t] = j; 64 w[t ++] = tmp; 65 } 66 } 67 } 68 printf("%d\n",kruskal()); 69 } 70 return 0; 71 }
转载于:https://www.cnblogs.com/mitrenick/p/3707451.html
SOJ2198 Highways 最小生成树 kruskal算法相关推荐
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- 图的最小生成树-Kruskal算法
问题引入 [问题描述] 编写程序,利用带权无向图的邻接矩阵存储,实现图的最小生成树Kruskal算法. [输入形式] 输入图的顶点序列及图的边的情况.如样例所示.边的输入以输入-1,-1,-1作为结束 ...
- 最小生成树kruskal算法
最小生成树kruskal算法 概述 算法分析 代码 概述 克鲁斯卡尔(Kruskal)(Kruskal)(Kruskal)算法是求连通网的最小生成树的另一种方法.与普里姆(Prim)(Prim)(Pr ...
- 实现最小生成树Kruskal算法(附完整代码)
实现最小生成树Kruskal算法(附完整代码) Kruskal算法是一种常见的计算最小生成树的算法.它的主要思想是将所有的边按照权值从小到大进行排序,并逐个加入到生成树中,如果加入后不会形成环,则保留 ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 图论(九)最小生成树-Kruskal算法
前面说过,Kruskal是从最短边着手构建最小生成树的.其基本过程是:先对图中的所有边按照权重值从小到大进行排序,然后着手选取边构建最小生成树.如果直接从小到大按顺序选取,有可能形成了环,所以对环的处 ...
- 算法实践--最小生成树(Kruskal算法)
什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值,最小生成树是这些边的一个子集.这些边可以将所有端点连到一起,且总的权重最小 下图所示的例子,最小生成树 ...
- C++ 实现无向图的最小生成树Kruskal算法(完整代码)
按照Kruskal思想,n个结点的生成树有n-1条边,故反复上述过程,直到选取了n-1条边为止,就构成了一棵最小生成树. 实现Kruskal算法的关键问题是: 当一条边加入T的边集中后,如何判断是否构 ...
- 【数据结构与算法】图结构最小生成树Kruskal算法的Java实现
Kruskal算法 Kruskal算法是图论中用于求解最小生成树的算法,算法时间复杂度为O(eloge) 比较起Prim算法,Kruskal算法虽然同求最小生成树,却更适合稀疏网. 这里图的储存结构建 ...
最新文章
- 怎么理解linux的平均负载及平均负载高后的排查工具
- java 队列的数组_JAVA-循环数组实现简单的队列
- 中立时滞matlab,中立型时滞系统的稳定性改进判据
- 五步让你成为专家级程序员
- ubuntu10.4的更新源因过期无法更新的解决方法
- 雪城大学信息安全讲义 3.1 Set-UID 机制如何工作
- Spring boot:注解@SpringBootApplication
- React 16.8.3 发布,构建用户界面的 JavaScript 库
- 异常值检测 —— MAD(median absolute deviation)
- 最大子数组累加和(2种方法)
- 《中文分词算法研究》
- java 录制_Java屏幕录像
- SpringBoot+Vue+Cas单点登录与登出
- 安装一台RHEL7虚拟机
- 【贪心法】黑白连线问题
- 【项目】Online Judge(在线评判系统)
- Excel — 动态图表(复选框实现动态图)
- Matlab sim函数的用法
- Redis底层 知识(校招、社招必看)
- eve显示无法连接服务器,eve 链接不到服务器