• 感觉挺简单的,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的更多相关文章

  1. poj1861 最小生成树 prim &amp; kruskal

    // poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是 #include <cstdio> #includ ...

  2. 图的最小生成树(Prim、Kruskal)

    理论: Prim: 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合.算法从U={u0}(u0∈V).TE={}开始.重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E ...

  3. 最小生成树 Prim算法 Kruskal算法实现

    最小生成树定义 最小生成树是一副连通加权无向图中一棵权值最小的生成树. 在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即,而 w(u, v) 代表此边的 ...

  4. 最小生成树Prim算法 Kruskal算法

    Prim算法(贪心策略)N^2 选定图中任意定点v0,从v0开始生成最小生成树 树中节点Va,树外节点Vb 最开始选一个点为Va,其余Vb, 之后不断加Vb到Va最短距离的点 1.初始化d[v0]=0 ...

  5. 最小生成树--Prim及Kruskal

    //prim算法#include<cstdio> #include<cmath> #include<cstring> #include<iostream> ...

  6. 最小生成树prim和kruskal模板

    prim: int cost[MAX_V][MAX_V]; //cost[u][v]表示边e=(u,v)的权值(不存在的情况下设为INF) int mincost[MAX_V]; //从集合X出发的每 ...

  7. 最小生成树Prim算法Kruskal算法

    Prim算法采用与Dijkstra.Bellamn-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点. 算法分析 & 思想讲解: Prim算法每次 ...

  8. 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ...

  9. 转载:最小生成树-Prim算法和Kruskal算法

    本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...

随机推荐

  1. python学习笔记 | PyCharm出现卡顿解决方法

    问题:使用pycharm时常出现 the IDE is running low on memory 的问题 表示pycharm这款IDE使用内存不足 需要在系统内存充足的情况下扩充IDE memory ...

  2. 在项目中应该使用Boolean还是使用boolean?

    起因 在公司看代码时,看到了使用Boolean对象来完成业务逻辑判断的操作.和我的习惯不一致,于是引起了一些反思. boolean和Boolean的差别咱就不说了,我们仅探讨使用boolean与Boo ...

  3. 【Linux】一个网卡部署多个内网ip

    1.用root权限的用户登录CENTOS,进入network-scripts文件夹下(本步骤可以省略,与二步骤一起完成): shell命令:cd /ect/sysconfig/network-scri ...

  4. Linux Shell 编程基础详解——吐血整理,墙裂推荐!

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  5. Django实现文件在本地的存储和读取

    需求介绍:将图片存入本地的电脑文件夹中,将图片的路径保存到数据库,然后通过数据库的路径读取文件: 1.文件的存入: 前端文件: <form class="form-horizontal ...

  6. Django-http协议

    Http协议:超文本传输协议(应用层程序).它是客户端和服务端请求和应答的标准.Http的请求响应模型:1.客户端连接到web服务器一个http客户端,与web服务器的http端口(默认是80)建立了 ...

  7. python(re正则)

    import re #导入模块   info = 'qwewwer12332423kdsjfkl2342kdjfl213nkafal123123' 例1: res1 = re.compile('er( ...

  8. jQuery 当前展开其他收缩 三级下拉菜单(转载)

    jQuery可展开收缩三级下拉菜单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  9. 冷饭新炒:理解JDK中UUID的底层实现

    前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符.对于UUID的描述,下面摘录一下规范文件A Universally Uniqu ...

  10. power network 电网——POJ1459

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 27282   Accepted: 14179 D ...