最小生成树 Prim和Kruskal
- 感觉挺简单的,Prim和Dijkstra差不多,Kruskal搞个并查集就行了,直接上代码吧,核心思路都是找最小的边. 
- Prim - int n,m;
 int g[N][N];
 int u,v;
 int dis[N];
 bool st[N]; int prim(){
 me(dis,INF,sizeof(dis)); int res=0;
 for(int i=0;i<n;++i){
 int t=-1;
 for(int j=1;j<=n;++j){
 if(!st[j] && (t==-1 || dis[t]>dis[j])) t=j;
 }
 if(i && dis[t]==INF) return INF;
 if(i) res+=dis[t]; for(int j=1;j<=n;++j){
 dis[j]=min(dis[j],g[t][j]);
 } st[t]=true;
 }
 return res;
 } int main() {
 scanf("%d %d",&n,&m); me(g,INF,sizeof(g)); for(int i=1;i<=m;++i){
 int a,b,c;
 scanf("%d %d %d",&a,&b,&c);
 g[a][b]=g[b][a]=min(g[a][b],c);
 } int t=prim(); if(t==INF) puts("impossible");
 else printf("%d\n",t); return 0;
 }
 
- Kruskal - struct misaka{
 int a,b;
 int val;
 }e[N]; int n,m;
 int p[N]; bool cmp(misaka n,misaka m){
 return n.val<m.val;
 } int find(int x){
 if(p[x]!=x) p[x]=find(p[x]); return p[x];
 } int main() {
 scanf("%d %d",&n,&m); for(int i=0;i<m;++i){
 int a,b,val;
 scanf("%d %d %d",&a,&b,&val);
 e[i]={a,b,val};
 } sort(e,e+m,cmp); for(int i=1;i<=n;++i) p[i]=i; int res=0;
 int cnt=0; for(int i=0;i<m;++i){
 int a=e[i].a;
 int b=e[i].b;
 int val=e[i].val; a=find(a);
 b=find(b); if(a!=b){
 p[a]=b;
 res+=val;
 cnt++;
 }
 } if(cnt<n-1) puts("impossible");
 else printf("%d\n",res); return 0;
 }
 
最小生成树 Prim和Kruskal的更多相关文章
- poj1861 最小生成树 prim & kruskal
		// poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是 #include <cstdio> #includ ... 
- 图的最小生成树(Prim、Kruskal)
		理论: Prim: 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合.算法从U={u0}(u0∈V).TE={}开始.重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E ... 
- 最小生成树 Prim算法 Kruskal算法实现
		最小生成树定义 最小生成树是一副连通加权无向图中一棵权值最小的生成树. 在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即,而 w(u, v) 代表此边的 ... 
- 最小生成树Prim算法 Kruskal算法
		Prim算法(贪心策略)N^2 选定图中任意定点v0,从v0开始生成最小生成树 树中节点Va,树外节点Vb 最开始选一个点为Va,其余Vb, 之后不断加Vb到Va最短距离的点 1.初始化d[v0]=0 ... 
- 最小生成树--Prim及Kruskal
		//prim算法#include<cstdio> #include<cmath> #include<cstring> #include<iostream> ... 
- 最小生成树prim和kruskal模板
		prim: int cost[MAX_V][MAX_V]; //cost[u][v]表示边e=(u,v)的权值(不存在的情况下设为INF) int mincost[MAX_V]; //从集合X出发的每 ... 
- 最小生成树Prim算法Kruskal算法
		Prim算法采用与Dijkstra.Bellamn-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点. 算法分析 & 思想讲解: Prim算法每次 ... 
- 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
		matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ... 
- 转载:最小生成树-Prim算法和Kruskal算法
		本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ... 
随机推荐
- CAN总线采样点测试
			采样点是什么? 采样点是接受节点判断信号逻辑的位置,CAN通讯属于异步通讯.需要通过不断的重新同步才能保证收发节点的采样准确. 若采样点太靠前,则因为线缆原因,DUT外发报文尚未稳定,容易发生采样错误 ... 
- python optparse模块的用法
			引用原博主文章链接: https://www.cnblogs.com/darkpig/p/5717902.html 
- WeihanLi.Npoi 1.14.0 Release Notes
			WeihanLi.Npoi 1.14.0 Release Notes Intro 周末更新了一下项目,开始使用可空引用类型,并且移除了 net45 的支持,仅支持 netstandard2.0 Cha ... 
- 入门OJ:photo
			题目描述 有N个人,来自K个家族.他们排成一行准备照相,但是由于天生的排外性,每个人都希望和本家族的人站在一起,中间不要加入别的家族的人.问最少从队列中去掉多少个就可以达到这个目的. 输入格式 第一行 ... 
- linux设备
			设备初始化时同样要执行一个device_register函数,该函数传入一个struct device *类型的指针,因此要定义一个struct device类型的变量作为我们的设备. struct ... 
- Vue基础之Vue的模板语法
			Vue基础之Vue的模板语法 数据绑定 01 数据绑定最常见的形式就是使用插值表达式(两个大括号!)[也就是小胡子语法!mustache] <body> <!-- Vue.js的应用 ... 
- (15)-Python3之--configparser模块
			1.模块简介 configparser模块是python用来读取配置文件的模块,置文件的格式跟windows下的ini或conf配置文件相似,可以包含一个或多个节(section), 每个节可以有多个 ... 
- Netty服务端Server代码说明
			本文是简单的Netty启动服务端代码理解笔记 public class MyServer { public static void main(String[] args) throws Excepti ... 
- 让绝对定位的div居中
			最近看到一个问题就是让绝对定位的div居中,在尝试了top:50%:left:50%:后发现,居中是有问题的并不是想象中的样子 需要再加两句margin-top:-盒子高度的一般px margin- ... 
- 自导自演的面试现场,趣学MySQL的10种文件
			导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 24 篇. 今天我要跟你分享的MySQL话题是:"自导自演的数据库面试现场--谈谈MySQL的10种文件" 换一种写作风格 ... 
