`
phinecos
  • 浏览: 353995 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HDU1301 Jungle Roads(克鲁斯卡尔算法版)

 
阅读更多

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301

通过对数组构造一个静态链表,将在同一个连通分量中的顶点链接起来。对按边权值从大到小排序后的边集合逐条进行判断,若边的起点和终点分别在不同的连通分量链表中(这通过获取其所在链表的表尾元素是否是同一个来进行判定),则此边加入最小生成树的边集合中,并将边的终点加入到边的起点所在的静态链表中。最终所有结点都会链接到一个静态链表中。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include<iostream>
#include
<string>
#include
<algorithm>
usingnamespacestd;

constintMAX_VETEXT_NUM=26;//最大的顶点数
constintMAX_EDGE_NUM=75;//最大的边数

structEdge
{
intbegin;//起点
intend;//结点
doublecost;//边的权值
};

Edgeedge[MAX_EDGE_NUM];
//边集合
doublesum=0;
intConnectedList[MAX_VETEXT_NUM];//连通分量静态链表
intnEdges;//边的数目
intnVetexs;//顶点数目

intFindInConnectList(intPoint[],intv)
{
//若v所在的连通分量静态链表为空,则返回参数v,否则返回其所在链表的表尾元素,
inti=v;
while(Point[i]>0)
i
=Point[i];
returni;
}

boolcmp(constEdge&a,constEdge&b)
{
//根据边权值从小到大排序
returna.cost<b.cost;
}

voidKruscal()
{
inti,j;
intv1,v2;
//初始化连通分量静态链表
for(i=0;i<nVetexs;i++)
{
ConnectedList[i]
=0;
}
i
=0;j=0;
while(j<nVetexs-1&&i<nEdges)
{
v1
=FindInConnectList(ConnectedList,edge[i].begin);
v2
=FindInConnectList(ConnectedList,edge[i].end);

if(v1!=v2)
{
//起点和终点不在同一个连通分量重
sum+=edge[i].cost;
ConnectedList[v1]
=v2;//加入连通分量链表中
++j;//最小生成树边数加1
}
++i;//处理完一条边
}
}

intmain()
{
inti,j;
intnum;
doublecost;
charchStart,chEnd;
while(cin>>nVetexs&&nVetexs!=0)
{
sum
=0;
nEdges
=0;
for(i=0;i<nVetexs-1;i++)
{
cin
>>chStart>>num;
for(j=0;j<num;j++)
{
cin
>>chEnd>>cost;
edge[nEdges].begin
=chStart-'A';
edge[nEdges].end
=chEnd-'A';
edge[nEdges].cost
=cost;
nEdges
++;
}
}
sort(edge,edge
+nEdges,cmp);
Kruscal();
cout
<<sum<<endl;
}
return0;
}

分享到:
评论

相关推荐

    hdu ACM代码 每种算法都有分类

    HDU ACM代码集合是针对ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)的一份资源,这个压缩包中的代码涵盖了多种算法,是参赛者或对算法学习感兴趣的人宝贵的参考资料。ACM竞赛旨在...

    HDU算法讲解的PPT

    HDU算法讲解的PPT是一份非常有价值的教育资源,由知名教育机构HDU(杭州电子科技大学)的lcy老师精心制作并讲解。这份PPT涵盖了算法的各个方面,是学习和提升算法能力的理想材料。标签“算法”、“讲解”和“经典”...

    HDU_ACM培训课件(完整版)

    通过完整版的HDU_ACM培训课件,学员可以从理论到实践全面提高自己的编程能力和竞赛水平,为在ACM竞赛中取得好成绩打下坚实基础。对于想要深入理解和掌握算法及编程技巧的人来说,这套课件是一份宝贵的资源。

    ACM-HDU涉及了很多算法

    在ACM(国际大学生程序设计竞赛)中,HDU(杭州电子科技大学)的在线判题系统是许多参赛者磨炼算法技巧的重要平台。这个平台涵盖了众多的算法问题,旨在提升参赛者的编程能力和逻辑思维能力。以下是对标题和描述中...

    hdu动态规划算法集锦

    根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...

    acm课件 HDU 算法大全

    acm 技术大牛 课件 HDU 自学必备课件 全套齐全 (lecture_01)初识ACM (lecture_02)简单数学题 (lecture_03)递推求解 (lecture_04)动态规划(1)_ (lecture_05)计算几何基础_ (lecture_06)母函数 (lecture_...

    ACM HDU题目分类

    贪心算法是一种常用的算法思想,在 ACM HDU 题目分类中,贪心算法也占据了一定的比例。例如,1009 贪心;1050 贪心;1052 贪心;1053 贪心,关于 Huffman 编码 等等。 数学题 数学题是 ACM HDU 题目分类中的一大类...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    HDU 算法 ACM课件

    HDU(杭州电子科技大学)的ACM算法课件是一份宝贵的学习资源,旨在提升程序员的算法思维和解题能力。ACM,全称国际大学生程序设计竞赛(International Collegiate Programming Contest),是全球范围内的一项权威性...

    hdu1010搜索算法

    杭州电子科技大学oj平台上的第1010题,是关于搜索的题目,很不错的题

    HDU 专题分类(2013年8月)

    JungleRoads (丛林道路) - **问题描述**:可能涉及到在复杂地形中规划道路,需要考虑道路的成本和效率。 - **算法应用**:最小生成树算法如Prim或Kruskal,用于构建连接所有节点的最低成本路径。 #### 4. ...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    Hdu1000—2169部分代码

    下载这些代码可以帮助学习者理解如何应用编程技巧和算法来解决HDU OJ上的问题,从而提高自己的编程和算法能力。 标签"HDu acm"进一步确认了这些代码与ACM竞赛相关的编程挑战有关,可能是参赛者或训练者为了准备比赛...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    (HDUACM2010版_08)母函数

    (HDUACM2010版_08)母函数(HDUACM2010版_08)母函数(HDUACM2010版_08)母函数(HDUACM2010版_08)母函数(HDUACM2010版_08)母函数(HDUACM2010版_08)母函数

    杭电ACMhdu1163

    通过解答杭电ACMhdu1163这样的题目,参赛者可以锻炼自己的算法思维,提升编程能力,为参与更高级别的编程竞赛打下坚实基础。同时,这也是一个很好的实践平台,将理论知识转化为实际解决问题的能力。

    Dijkstra算法解HDU1874

    **Dijkstra算法解HDU1874** Dijkstra算法是一种经典的图论算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出,主要用于解决单源最短路径问题。在这个问题中,我们需要从一个指定的起点(源节点)出发,找到...

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

Global site tag (gtag.js) - Google Analytics