【内含最小生成树Prim模板】

题目https://www.luogu.org/problemnew/show/P1546

题意:给定一个邻接矩阵。求最小生成树。

思路:点少边多用Prim。

Prim其实是把已经在最小生成树里的节点缩成一个,用priorityqueue每次找到距离当前最小生成树距离最小的那条边,加入树中。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<map>
  4. #include<set>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<vector>
  8. #include<cmath>
  9. #include<stack>
  10. #include<queue>
  11. #include<iostream>
  12.  
  13. #define inf 0x3f3f3f3f
  14. using namespace std;
  15. typedef long long LL;
  16. typedef pair<int, int> pr;
  17.  
  18. int n;
  19. const int maxn = ;
  20. int head[maxn], tot = ;
  21. struct edge{
  22. int to, nxt, w;
  23. }e[maxn * maxn];
  24.  
  25. void add(int x, int y, int w)
  26. {
  27. e[++tot].to = y;
  28. e[tot].w = w;
  29. e[tot].nxt = head[x];
  30. head[x] = tot;
  31. // e[++tot].to = x;
  32. // e[tot].w = w;
  33. // e[tot].nxt = head[y];
  34. // head[y] = tot;
  35. }
  36.  
  37. int ans = ;
  38. int d[maxn];
  39. bool vis[maxn];
  40. int prim(int s)
  41. {
  42. priority_queue<pr, vector<pr>, greater<pr> >que;
  43. memset(d, 0x3f, sizeof(d));
  44. int num = ;
  45. vis[s] = true;
  46. for(int i = head[s]; i; i = e[i].nxt){
  47. if(e[i].to != ){
  48. que.push(make_pair(e[i].w, e[i].to));
  49. d[e[i].to] = min(d[e[i].to], e[i].w);
  50. }
  51. }
  52. while(!que.empty() && num != n){
  53. while(!que.empty() && vis[que.top().second])que.pop();
  54. if(que.empty())break;
  55. int x = que.top().second;
  56. vis[x] = true;
  57. ans += que.top().first;que.pop();
  58. num++;
  59. for(int i = head[x]; i; i = e[i].nxt){
  60. if(!vis[e[i].to] && d[e[i].to] > e[i].w){
  61. que.push(make_pair(e[i].w, e[i].to));
  62. d[e[i].to] = e[i].w;
  63. }
  64. }
  65. }
  66. if(num != n)return -;
  67. else return ans;
  68. }
  69.  
  70. int main()
  71. {
  72. scanf("%d", &n);
  73. for(int i = ; i <= n; i++){
  74. for(int j = ; j <= n; j++){
  75. int w;
  76. scanf("%d", &w);
  77. if(i != j){
  78. add(i, j, w);
  79. }
  80. }
  81. }
  82. printf("%d\n", prim());
  83. }

洛谷1546 最短网络Agri-Net【最小生成树】【prim】的更多相关文章

  1. 洛谷P1546 最短网络 Agri-Net(最小生成树,Kruskal)

    洛谷P1546 最短网络 Agri-Net 最小生成树模板题. 直接使用 Kruskal 求解. 复杂度为 \(O(E\log E)\) . #include<stdio.h> #incl ...

  2. 洛谷 P1546 最短网络 Agri-Net(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1546 首先不难看出这道题的思想是用了最小生成树,但是这道题有难点: 1.读题读不明白 2.不会读入 ...

  3. 洛谷 P1546 最短网络 Agri-Net

    题目链接 https://www.luogu.org/problemnew/show/P1546 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当 ...

  4. 洛谷P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 526通过 959提交 题目提供者JOHNKRAM 标签图论贪心USACO 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 50分C++代码,求解 请指 ...

  5. 洛谷——P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一 ...

  6. 洛谷 P1546 最短网络 Agri-Net Label:Water最小生成树

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

  7. 洛谷 P1546 最短网络 Agri-Net(最小生成树)

    题目链接 https://www.luogu.org/problemnew/show/P1546 说过了不复制内容了 显然是个最小生成树. 解题思路 prim算法 Kruskal算法 prim算法很直 ...

  8. 洛谷 P1546 最短网络 Agri-Net x

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

  9. 洛谷P1546 最短网络 Agri-Net(Prim堆优化)

    #include<bits/stdc++.h> using namespace std; ; const int INF=0x3f3f3f3f; inline void read(int ...

随机推荐

  1. Word 插入目录的 5 种方法

    1. "运用多级编号法"之图文教程 效果图: 步骤: 首先,为了更好的演示,我们先将我们的一级标题全部选中,按住Ctrl键,去一一选择就行了. 选中一级标题后,我们进入「开始」-「 ...

  2. Spring Boot系列教程十四:Spring boot同时支持HTTP和HTTPS

    自签证书 openssl生成服务端证书,不使用CA证书直接生成 -in server.csr -signkey server.key -out server.crt # 5.server证书转换成ke ...

  3. js — 基础知识

    目录 1. js的介绍 2. js的引入方式 3. js语句 4. 变量 js ( Javascript ) - 脚本语言 1. js的介绍 Javascript是一种运行在浏览器中的解释型的编程语言 ...

  4. php底层变量存储

    变量存储 php的变量使用一个结构体 zval来保存的,在Zend/zend.h中我们可以看到zval的定义 struct _zval_struct { /* Variable information ...

  5. Nginx 不支持WebSocket TCP

    proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

  6. 关于MySQL的驱动org.gjt.mm.mysql.Driver

    今天看了一个比较老视频使用org.gjt.mm.mysql.Driver来驱动连接,便试了一下看看怎么样,结果一直连不上数据库,后来看了tomcat的后台发现有报这个问题,于是把驱动改成com.mys ...

  7. 【SQL Server性能优化】删除大量数据的方法比较

    原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...

  8. 学习C#自作计算器,菜鸟初学,有大神的指点,希望做的不够好的地方请大家多多指导。同时希望非常无聊的大神能加些其它计算进去

    可以做幂运算,根号运算,十进制与二进制互转,16进制与十进制互转 namespace WindowsFormsApplication15 { public partial class 祥哥计算器 : ...

  9. web.xml 转 学习!http://www.cnblogs.com/wkrbky/p/5929943.html

    1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLoaderListener(l ...

  10. 清空windows系统网络配置

    清空windows系统网络配置 来源  https://www.cnblogs.com/lemon-rain/p/9569990.html 具体描述:qq,微信可用网,但其他不能用. 一.win+r ...