Prim && Kruskal
Prim
- #include<iostream>
- #include<cstring>
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = ;
- int n, k;
- int dis[N], ct[N][N], vis[N];
- int Prim()
- {
- int ans = ;
- memset(vis, , sizeof(vis));
- /*
- for(int i = 1; i <= n; i++)
- dis[i] = ct[1][i];
- vis[1] = 1;
- */
- while()
- {
- int v = -;
- for(int i = ; i <= n; i++)
- {
- if(!vis[i] && (v == -||dis[v]>dis[i])) v = i;
- }
- if(v == -) break;
- ans += dis[v];
- vis[v] = ;
- for(int i = ; i <= n; i++)
- if(!vis[i])
- dis[i] = min(dis[i], ct[v][i]);
- }
- return ans;
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie();
- cout.tie();
- cin >> n >> k;
- memset(dis, INF, sizeof(dis));
- int tmp;
- while(k--)
- {
- cin >> tmp;
- dis[tmp] = ;
- }
- for(int i = ; i <= n; i++)
- for(int j = ; j <= n; j++)
- cin >> ct[i][j];
- cout << Prim() << endl;
- return ;
- }
Kruskal
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- const int N = ;
- struct node
- {
- int l, r, c;
- bool operator < (const node & x)
- {
- return c < x.c;
- }
- }A[N*N];
- int pre[N];
- int Find(int x)
- {
- if(x == pre[x]) return x;
- return pre[x] = Find(pre[x]);
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie();
- cout.tie();
- int n, m;
- cin >> n >> m;
- for(int i = ; i <= n; i++)
- pre[i] = i;
- int t, tmp;
- cin >> t;
- m--;
- while(m--)
- {
- cin >> tmp;
- t = Find(t);
- tmp = Find(tmp);
- pre[tmp] = t;
- }
- int cnt = ;
- for(int i = ; i <= n; i++)
- {
- for(int j = ; j <= n; j++)
- {
- cin >> tmp;
- if(i <= j) continue;
- A[cnt].l = i, A[cnt].r = j, A[cnt++].c = tmp;
- }
- }
- int ans = ;
- sort(A, A+cnt);
- for(int i = ; i < cnt; i++)
- {
- int x =A[i].l, y = A[i].r, ct = A[i].c;
- x = Find(x), y = Find(y);
- if(x == y) continue;
- pre[y] = x;
- ans += ct;
- }
- cout << ans << endl;
- return ;
- }
Prim && Kruskal的更多相关文章
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
- 最小生成树详解 prim+ kruskal代码模板
最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...
- 最小生成树 Prim Kruskal
layout: post title: 最小生成树 Prim Kruskal date: 2017-04-29 tag: 数据结构和算法 --- 目录 TOC {:toc} 最小生成树Minimum ...
- 最小生成树算法详解(prim+kruskal)
最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...
- POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)
题目链接: 传送门 Agri-Net Time Limit: 1000MS Memory Limit: 10000K Description Farmer John has been elec ...
- 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ...
- 最小生成树算法(Prim,Kruskal)
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- 数据结构学习笔记05图(最小生成树 Prim Kruskal)
最小生成树Minimum Spanning Tree 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 树: 无回路 |V|个顶 ...
- POJ 1258 Agri-Net (Prim&Kruskal)
题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通.求边的最小总花费. 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复 ...
- UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Krus ...
随机推荐
- 解决微信小程序开发者工具输入框焦点问题
Windows10笔记本上运行微信小程序开发者工具,输入框(input,textarea)没有焦点,只能在真机调试,效率太低.后来发现是Window10对笔记本高分屏支持不好,要DPI缩放,导致兼容性 ...
- 新IT运维时代 | Docker运维之最佳实践-上篇
容器技术的发展可以分为两个阶段,第一个阶段聚焦在IaaS层,仅仅把容器当做更轻量级虚拟机来使用,解决了应用运行时进程级资源隔离的问题:随着Docker的出现,容器虚拟化才有了统一的平台,由此容器技术发 ...
- 一份新的lilypond谱子,能设置页边距和设置换页符了
给学生做的一份乐谱,这回能设置页边距了,以及设置换页符了. 顺带能设置一些代码片段(snippet),可以用热键代替使用 设置页边距的snippet: \paper { %双引号里面填页面大小 #(s ...
- javaweb基础整理随笔-----上传与下载步骤详解
这次整理的是上传与下载的原生代码解析: 上传:1.对页面的要求:enctype="multipart/form-data" method="post" ...
- pull解析案例
此pull解析案例是eclipes的对不对,不知道, private void getXml() { try { InputStream is = getAssets().open("new ...
- Linux之各程序安装
python安装 安装python3.6 安装python前的库环境,非常重要 yum install gcc patch libffi-devel python-devel zlib-devel b ...
- 学习Canvas这一篇文章就够了
一.canvas简介 <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是 ...
- java算法(4)---静态内部类实现雪花算法
静态内部类单例模式实现雪花算法 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1. ...
- 微信小程序项目总结-记账小程序(包括后端)
一.小程序部分 这是理财系统的前端,江苏海洋大学微信小程序比赛,最后获得了一等奖 GitHub:https://github.com/GeorgeLeoo/finance 1. 项目描述 (1). 此 ...
- 逆向破解之160个CrackMe —— 014
CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...