//    poj1861 最小生成树 prim & kruskal
//
//    一个水题,为的仅仅是回味一下模板。日后好有个照顾不是#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <iostream>using namespace std;const int MAX_N = 1008;
const int INF = 0x3f3f3f3f;
int g[MAX_N][MAX_N];
int n,m;
int cnt;
int mx;
int d[MAX_N];
bool vis[MAX_N];
int pre[MAX_N];
struct edge{int from;int to;int w;edge(){}edge(int from,int to,int w): from(from),to(to),w(w){}};
edge edges[MAX_N * 15];bool cmp(edge a,edge b){return a.w < b.w;
}void print1(){for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)printf("%d ",g[i][j]);puts("");}}void input1(){int u,v,cost;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){g[i][j] = INF;if (i == j)g[i][j] = 0;}for (int i=0;i<m;i++){scanf("%d%d%d",&u,&v,&cost);g[u][v] = g[v][u] = cost;}//    print1();for (int i=1;i<=n;i++){pre[i] = 1;}cnt = 0;}int fa[MAX_N];
int height[MAX_N];
void input2(){int u,v,cost;for (int i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&cost);edges[i] = edge(u,v,cost);}for (int i=1;i<=n;i++){fa[i] = i;height[i] = 0;}sort(edges+1,edges+m+1,cmp);}int getf(int x){if (x==fa[x])return x;return fa[x] = getf(fa[x]);
}void kruskal(){int cnt = 0;int mx = 0;for (int i=1;i<=m;i++){int x = getf(edges[i].from);int y = getf(edges[i].to);if (x==y)continue;if (height[x] < height[y]){fa[x] = y;}else {fa[y] = x;if (height[x]==height[y])height[x]++;}mx = max(mx,edges[i].w);edges[cnt++] = edges[i];}printf("%d\n",mx);printf("%d\n",cnt);for (int i=0;i<cnt;i++){printf("%d %d\n",edges[i].from,edges[i].to);}
}void prim(){for (int i=1;i<=n;i++)d[i] = g[1][i];d[1] = 0;for (int i=1;i<=n;i++){vis[i] = 0;}vis[1] = 1;mx = 0;for (int i=1;i<=n;i++){int k = -1;for (int j=1;j<=n;j++){if (!vis[j] && (k == -1 || d[k] > d[j])){k = j;}}if (k==-1)break;vis[k]++;mx = max(mx,d[k]);edges[cnt++] = edge(k,pre[k],d[k]);for (int j=1;j<=n;j++){if (!vis[j] && g[k][j]!= INF &&d[j] > g[k][j]){d[j] = g[k][j];pre[j] = k;}}}}void print(){printf("%d\n",mx);printf("%d\n",cnt);for (int i=0;i<cnt;i++){printf("%d %d\n",edges[i].from,edges[i].to);}
}void solve(){//prim();kruskal();//print();
}int main(){freopen("1.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){//input1();input2();solve();}
}

转载于:https://www.cnblogs.com/lxjshuju/p/6836422.html

poj1861 最小生成树 prim amp; kruskal相关推荐

  1. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  2. 最小生成树(Prim、Kruskal)算法,秒懂!

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚,什么是最小生成树? 一个有 n 个结点的连通图的生成树是原图的极小连通子 ...

  3. 可视化最小生成树Prim、Kruskal

    代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...

  4. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  5. poj 2031 BuildingaSpaceStation 最小生成树 Prim、Kruskal

    题意: 三维空间里有一些球,给出球心坐标和半径,搭建通路,使得他们能够相互连通.如果两个球相交或者相切,则算已连通,无需再搭桥.求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离). Inpu ...

  6. 最小生成树 | Prim算法 Kruskal算法 |C语言

    一.Prim算法 MST收集的是顶点: 这里的dist[]是指结点V到最小生成树的最小距离: 当dist[V] = 0 时,表明结点V被收录到最小生成树中, 如果dist[W] != 0,表明结点W还 ...

  7. poj 2421 ConstructingRoads 最小生成树 Prim、Kruskal

    题意: 有n个村庄,从1到n,你应该修建一些道路,这样每两个村庄就可以互相连接.我们说两个村庄A和B是相连的,如果并且仅当在A和B之间有一条道路,或者存在一个村庄C,使得A和C之间有一条道路,并且C和 ...

  8. 用Prim和Kruskal两种算法,求解最小生成树

    本文通过具体的算法模板题,给出Prim和Kruskal两种求解最小生成树求解过程和代码~ 由浅入深,通俗易懂 题目选自洛谷P3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则 ...

  9. 数据结构实验之图论六:村村通公路(最小生成树Prim/Kruskal)

    Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出 ...

最新文章

  1. JavaScript事件冒泡
  2. vue之watch用法
  3. 遇到 ORACLE 错误 1658
  4. 目前数据可视化工具软件的排名
  5. 市场研究中的数据分析知识整理 (四)-主成分分析和因子分析
  6. 台北三日自助游攻略(转载)
  7. Google Code的简单使用
  8. c语言成绩统计表,《小学期末考试成绩统计表五.xls》-支持高清全文免费浏览-max文档...
  9. 聚石塔服务器 微信,聚石塔云服务器
  10. 关于Fatal NI connect error 12170
  11. Salesforce: 关于Apexpages.Message类
  12. 践行网安,普惠河南——景安网络重磅网安公益项目加速推进中
  13. 虚拟化存储和非虚拟化存储
  14. JSP标签的简单使用
  15. 人工智能行业源代码防数据防泄密需求分析
  16. 英伟达Q3财报解读:营收连续四季度下滑 下一个增长拐点何时来?
  17. 为什么国家将加快人工智能研究生培养?又为什么很多研究生评论人工智能是个大坑呢?...
  18. echart地图知识点
  19. 我们如何在Pinterest Ads中使用AutoML,多任务学习和多塔模型
  20. vant树型菜单多级_无限层级菜单—左右值树型数据结构

热门文章

  1. C Primer Plus 第6章 C控制语句:循环 6.9 选择哪种循环
  2. zabbix之rpm简单快速安装详解
  3. linux的共享端口,Gogs与Linux共享SSH22端口
  4. c语言求一个数组的众数,众数问题 (C语言代码)
  5. python能解密java的,在python中解码Java对象
  6. 挂起和阻塞区别以及sleep和wait的区别
  7. matlab实现滑动平均滤波(二)
  8. android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...
  9. numpy生成随机数
  10. jittor和pytorch 生成网络对比之clustergan