- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并查集与最小生成树
并查集与最小生成树
并查集与最小生成树
最小生成树
1 概念:及特点
所谓最小生成树是连通图的一个子图,在网中去掉一些边,恰好剩N-1条边。
使得边权总和最小。
它是一种边权总和最小的树形结构 联通且无圈
例题一:建光缆系统
N个城市中,设计了许多条把两个城市连接起来的光缆,但还未施工。
这些光缆各有预算且足可以把所有城市全部联通。
请你从中选择出若干个设计,既保证N个城市能联通,又满足总预算最小。
我们先来解决求最小预算的问题。
具体算法
① prim算法
设f[x]为x点连入整个树结构的最小关联值。用类似于最短路的刷新式动归,从一个点出发,把整个图的每个点以最小的关联代价连入一棵二叉树。
参考代码:
#include iostream
using namespace std;
int main()
{
int n, m, i, j, a, b, c, min, p, s = 0;
cin n m;
int q[n + 1], g[n + 1][n + 1], h[n + 1][n + 1];
memset(h, 0, sizeof(h));
memset(g, 1, sizeof(g));
for (i = 1; i = m; i++)
{
cin a b c;
g[a][b] = g[b][a] = c;
h[a][++h[a][0]] = b;
h[b][++h[b][0]] = a;
}
for (i = 1;i = n; i++)
{
g[i][i] = 0;
q[i] = g[1][i];
}
for (i = 2; i = n; i++)
{
min = 2147483647;
for (j = 2; j = n; j++)
if (q[j] 0 q[j] min)
{
min = q[j];
p = j;
}
s += q[p];
q[p] = 0;
for (j = 1; j = h[p][0]; j++)
if (q[h[p][j]] != 0 g[p][h[p][j]] q[h[p][j]])
q[h[p][j]] = g[p][h[p][j]];
}
cout s endl;
system(pause);
return 0;
}
请对比从一点出发求最短路的DJS算法
课堂练习1
矿井用电
② CRUS算法及并查树的应用
此算法用一种树状结构来表示一个集合,称为并查集。
这个树状结构也称为并查树。它为每个节点设一个指向双亲的指针(可以用整数来表示,直接记双亲的点号)。树根指针单独编码。
此种集合表示法结合着一个既能查询、又能维护和优化并查树的查询函数,
查询过程很简洁。求两个集合的并集更是方便。
求两个点是否同集,就看二者的并查集是否同根。
把A集合并入B集合只需让A的根指向B的根即可。
参考代码
#include iostream
using namespace std;
int p[100];
struct l
{
int a[2], len;
}r[100];
int serch(int x)
{
if (p[x] 0)
return x;
return p[x] = serch(p[x]);
}
int main()
{
int n, m, i, j, s, js = 0, max = -1, t[2], ans = 0, num[100];
cin n m;
for (i = 1; i = n; i++)
p[i] = -1;
for (i = 1; i = m; i++)
cin r[i].a[0] r[i].a[1] r[i].len;
for (i = 1; i m; i++)
for (j = i + 1; j = m; j++)
if (r[i].len r[j].len)
swap(r[i], r[j]);
for (i = 1; js n - 1
您可能关注的文档
最近下载
- 酒店宾馆卫生管理制度3.docx VIP
- 新团员入团考试试题及答案.docx VIP
- 人教PEP版六年级上册英语全册教案(6个单元整体教学设计).pdf VIP
- 日常检维修计划和排程管理规定.pdf VIP
- 5G端到端组网架构及案例解析.pptx VIP
- 第2章有理数的运算单元卷2025—2026学年(人教版)七年级数学上册(含答案).docx
- JGJ_113-2009《建筑玻璃应用技术技程》.pdf VIP
- 战略管理(第6版) 课件 徐飞 第5--10章 战略分类与基本战略---战略评价与控制 .pptx
- SMETA确保员工合法工作权的核查程序-SEDEX验厂专用文件.doc
- KSM考后试卷分析及提分方法_.pdf VIP
原创力文档


文档评论(0)