kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)

总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Click here ~~
https://blog.csdn.net/m0_46272108/article/details/108980362

Description
想用路由器把N个地方连接起来,给定N个路由器安装点,接下来的N个数字表示在某地安装一个路由器的费用。再接下来N*N的矩阵表示两地进行连接时的花费。每个路由器只能用一次,例如在AB之间连接了,就需要分别在A和B购买一个路由器,然后再把他们连起来,然后再想在AC之间连接,A就必须要再买一个路由器,不能重复使用同一个路由器,求他们的最小花费

Input
T组输入。输入N代表需要N地互联,下面一行有N个数字,代表在第i个地方安装一个路由器的费用。下面N行为一个矩阵,代表第i个地方到第j个地方连接起来所需费用。 保证所有数字不超过1000。
Output
每组输出一个结果

Sample Input

1
3
10 20 30
0 100 200
100 0 300
200 300 0

Sample Output

370

理解 朴素Prim算法 即可 (代码有详细解释)
关于朴素Prim算法,可以查看这篇文章(内有模板题及图文详解):
图论 —— 最小生成树(朴素Prim原理及模板题) https://blog.csdn.net/m0_46272108/article/details/108929358

注意输入输出!!!!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define ll long long
//#define int ll
#define inf 0x3f3f3f3f
using namespace std;
int read()
{int w = 1, s = 0;char ch = getchar();while (ch < '0' || ch>'9') { if (ch == '-') w = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') { s = s * 10 + ch - '0';    ch = getchar(); }return s * w;
}
//最大公约数
int gcd (int x,int y) {if(x<y) swap(x,y);//很多人会遗忘,大数在前小数在后//递归终止条件千万不要漏了,辗转相除法return x % y ? gcd(y, x % y) : y;
}
//计算x和y的最小公倍数
int lcm (int x,int y) {return x * y / gcd(x, y);//使用公式
}
//------------------------ 以上是我常用模板与刷题几乎无关 ------------------------//
const int N = 1010;
int g[N][N];//边的权值
int st[N];
int dist[N];
int num[N];//点的权值
int k;//数据组数
int n;//图结点的数量int Prim()
{//存最小生成树里面所有长度之和int res = 0;for(int i = 1; i < n; i++) {//找到集合外,距离最短的点int minn = inf;int t;for(int j = 1; j <= n; ++j) {//在集合外if (!st[j] && minn > dist[j]) {minn = dist[j];t = j;}}res += dist[t];//将点加到树里面去。st[t] = true;/* 这里要先更新再累加,不然会出现自环问题,最小生成树是不存在环的。*///用t更新一下,其他点到 集合 的距离for (int j = 1; j <= n; ++j) {dist[j] = min(dist[j], g[t][j]);}}return res;
}
int main()
{scanf("%d",&k);while(k--){//图结点的数量n = read();//点的权值for (int i = 1; i <= n; ++i) {scanf("%d", &num[i]);}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= n; ++j) {g[i][j] = read();g[i][j] += num[i] + num[j];}}memset(st, false, sizeof st);//将1放进生成树st[1] = true;for (int i = 1; i <= n; ++i) {dist[i] = g[i][1];}printf("%d\n", Prim());}return 0;
}

kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)相关推荐

  1. ZOJ 1586 QS Network

    题目链接 QS Network Time Limit: 2 Seconds      Memory Limit: 65536 KB Sunny Cup 2003 - Preliminary Round ...

  2. 贪婪算法在求解最小生成树中的应用(JAVA)--Prim算法

    贪婪算法:通过一系列步骤来构造问题的解,每一步对目前构造的部分分解做一个拓展,直到获得问题的完整解为止,而算法的核心思想就在于,算法的每一步都必须满足以下条件:可行(满足问题的约束条件).局部最优(当 ...

  3. (kuangbin带你飞--最短路径)MPI Maelstrom(dijstra模板题)

    原题目: BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distr ...

  4. 最小生成树-prim算法模板

    题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...

  5. 最小生成树prim算法———模板

    codevs.cn 最优布线问题 #include<cstdio> #include<cstring> bool u[101]; int g[101][101],minn[10 ...

  6. 【最小生成树专题】POJ 2075 Tangled in Cables

    POJ 2075 Tangled in Cables 题目链接->http://poj.org/problem?id=2075 Time Limit: 1000MS   Memory Limit ...

  7. 最小生成树板子-AcWing 858. Prim算法求最小生成树

    题目分析 来源:acwing 分析: 给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|. 由 V 中的全部 n 个顶点和 E 中 n−1 ...

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

    文章目录 Kruskal算法 模板: Prim算法 模板: Kruskal算法 模板: https://blog.csdn.net/Rain722/article/details/65642992 K ...

  9. * poj 1251 JungleRoad 最小生成树 Kruskal算法、Prim算法

    文章目录 Kruskal算法 模板:https://blog.csdn.net/Rain722/article/details/65642992 Prim算法 模板: poj 1251 JungleR ...

最新文章

  1. win mysql 最大连接_常用的三种修改mysql最大连接数的方法
  2. jasmine.FunctionMatchers.toHaveBeenCalledWith的单步调试
  3. Javascript项目
  4. R爬虫小白入门:Rvest爬链家网+分析(三)
  5. 加密算法实现数据通讯
  6. 3dmax、python3、Rational Rose、DTLite、commons-math3、VM12、DreamWeaver、SPSS、sqlserver2008、mySQL等软件安装包最全集合
  7. 计算机控制环境下审计风险研究,计算机审计风险研究
  8. maven deploy 时报错-repository element was not specified in the POM inside distributionManagement eleme
  9. c语言中进入临界区函数,VC/MFC 临界区使用方法事例
  10. 手动链接react native的依赖
  11. Excel甘特图 Gantt Chart
  12. UVa10019:Funny Encryption Method
  13. 使用Jetcache过程的bug之Buffer underflow
  14. 运行数据区③---方法区
  15. 第一天 :二分查找+移除元素
  16. 大学生网站建设项目实施策划书
  17. adobe acrobat pro dc 无法打开PDF_PDF编辑Acrobat Pro软件教程 Acrobat XI Pro 全面技能标准培训视频...
  18. 什么是产品运营?文中这个举例感觉让我思路明朗了许多
  19. 论文阅读《How Does Knowledge Graph Embedding Extrapolate to Unseen Data: A Semantic Evidence View》
  20. 计算机vf中rest是什么意思,vf常用命令(全)

热门文章

  1. APP行业基准营销数据怎么获取?快用这两个免费应用数据工具
  2. 解决服务器挖矿漏洞 crypto
  3. cocos恭喜喜庆粒子特效
  4. 初学Python必备的软件你知道吗?
  5. 《响应式Web设计实践》一2.1 布局选项
  6. python之路(1)_重要函数使用
  7. 电脑有时突然黑屏,过一两秒就好了的问题解决
  8. java导出多个excel表格,并压缩成zip输出
  9. 关于小学生学习编程语言C++的经历经验分享,五问五答
  10. ubuntu18.04企业微信乱码