Electrification Plan

Prim

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. const int INF = 0x3f3f3f3f;
  5. const int N = ;
  6. int n, k;
  7. int dis[N], ct[N][N], vis[N];
  8.  
  9. int Prim()
  10. {
  11. int ans = ;
  12. memset(vis, , sizeof(vis));
  13. /*
  14. for(int i = 1; i <= n; i++)
  15. dis[i] = ct[1][i];
  16. vis[1] = 1;
  17. */
  18. while()
  19. {
  20. int v = -;
  21. for(int i = ; i <= n; i++)
  22. {
  23. if(!vis[i] && (v == -||dis[v]>dis[i])) v = i;
  24. }
  25. if(v == -) break;
  26. ans += dis[v];
  27. vis[v] = ;
  28. for(int i = ; i <= n; i++)
  29. if(!vis[i])
  30. dis[i] = min(dis[i], ct[v][i]);
  31. }
  32. return ans;
  33. }
  34. int main()
  35. {
  36. ios::sync_with_stdio(false);
  37. cin.tie();
  38. cout.tie();
  39. cin >> n >> k;
  40. memset(dis, INF, sizeof(dis));
  41. int tmp;
  42. while(k--)
  43. {
  44. cin >> tmp;
  45. dis[tmp] = ;
  46. }
  47. for(int i = ; i <= n; i++)
  48. for(int j = ; j <= n; j++)
  49. cin >> ct[i][j];
  50. cout << Prim() << endl;
  51. return ;
  52. }

Kruskal

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. const int N = ;
  6. struct node
  7. {
  8. int l, r, c;
  9. bool operator < (const node & x)
  10. {
  11. return c < x.c;
  12. }
  13. }A[N*N];
  14. int pre[N];
  15. int Find(int x)
  16. {
  17. if(x == pre[x]) return x;
  18. return pre[x] = Find(pre[x]);
  19. }
  20. int main()
  21. {
  22. ios::sync_with_stdio(false);
  23. cin.tie();
  24. cout.tie();
  25. int n, m;
  26. cin >> n >> m;
  27. for(int i = ; i <= n; i++)
  28. pre[i] = i;
  29. int t, tmp;
  30. cin >> t;
  31. m--;
  32. while(m--)
  33. {
  34. cin >> tmp;
  35. t = Find(t);
  36. tmp = Find(tmp);
  37. pre[tmp] = t;
  38. }
  39. int cnt = ;
  40. for(int i = ; i <= n; i++)
  41. {
  42. for(int j = ; j <= n; j++)
  43. {
  44. cin >> tmp;
  45. if(i <= j) continue;
  46. A[cnt].l = i, A[cnt].r = j, A[cnt++].c = tmp;
  47. }
  48. }
  49. int ans = ;
  50. sort(A, A+cnt);
  51. for(int i = ; i < cnt; i++)
  52. {
  53. int x =A[i].l, y = A[i].r, ct = A[i].c;
  54. x = Find(x), y = Find(y);
  55. if(x == y) continue;
  56. pre[y] = x;
  57. ans += ct;
  58. }
  59. cout << ans << endl;
  60. return ;
  61. }

Prim && Kruskal的更多相关文章

  1. 最小生成树(prim&kruskal)

    最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法:                  原始的加权连通图——————D被选作起点,选与之相连的权值 ...

  2. 最小生成树详解 prim+ kruskal代码模板

    最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...

  3. 最小生成树 Prim Kruskal

    layout: post title: 最小生成树 Prim Kruskal date: 2017-04-29 tag: 数据结构和算法 --- 目录 TOC {:toc} 最小生成树Minimum ...

  4. 最小生成树算法详解(prim+kruskal)

    最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...

  5. POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)

    题目链接: 传送门 Agri-Net Time Limit: 1000MS     Memory Limit: 10000K Description Farmer John has been elec ...

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

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

  7. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  8. 数据结构学习笔记05图(最小生成树 Prim Kruskal)

    最小生成树Minimum Spanning Tree 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 树: 无回路   |V|个顶 ...

  9. POJ 1258 Agri-Net (Prim&Kruskal)

    题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通.求边的最小总花费. 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复 ...

  10. UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解

    思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Krus ...

随机推荐

  1. 解决微信小程序开发者工具输入框焦点问题

    Windows10笔记本上运行微信小程序开发者工具,输入框(input,textarea)没有焦点,只能在真机调试,效率太低.后来发现是Window10对笔记本高分屏支持不好,要DPI缩放,导致兼容性 ...

  2. 新IT运维时代 | Docker运维之最佳实践-上篇

    容器技术的发展可以分为两个阶段,第一个阶段聚焦在IaaS层,仅仅把容器当做更轻量级虚拟机来使用,解决了应用运行时进程级资源隔离的问题:随着Docker的出现,容器虚拟化才有了统一的平台,由此容器技术发 ...

  3. 一份新的lilypond谱子,能设置页边距和设置换页符了

    给学生做的一份乐谱,这回能设置页边距了,以及设置换页符了. 顺带能设置一些代码片段(snippet),可以用热键代替使用 设置页边距的snippet: \paper { %双引号里面填页面大小 #(s ...

  4. javaweb基础整理随笔-----上传与下载步骤详解

    这次整理的是上传与下载的原生代码解析: 上传:1.对页面的要求:enctype="multipart/form-data" method="post"      ...

  5. pull解析案例

    此pull解析案例是eclipes的对不对,不知道, private void getXml() { try { InputStream is = getAssets().open("new ...

  6. Linux之各程序安装

    python安装 安装python3.6 安装python前的库环境,非常重要 yum install gcc patch libffi-devel python-devel zlib-devel b ...

  7. 学习Canvas这一篇文章就够了

    一.canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是 ...

  8. java算法(4)---静态内部类实现雪花算法

    静态内部类单例模式实现雪花算法 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1. ...

  9. 微信小程序项目总结-记账小程序(包括后端)

    一.小程序部分 这是理财系统的前端,江苏海洋大学微信小程序比赛,最后获得了一等奖 GitHub:https://github.com/GeorgeLeoo/finance 1. 项目描述 (1). 此 ...

  10. 逆向破解之160个CrackMe —— 014

    CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...