传送门

还是畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 41447    Accepted Submission(s): 18920

Description

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。

Output

对每个测试用例,在1行里输出最小的公路总长度。

Sample Input

3 1 2 1 1 3 2 2 3 4 4 1 2 1 1 3 4 1 4 1 2 3 3 2 4 2 3 4 5 0

Sample Output

35

prim()

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 105;
const int INF = 0x3f3f3f3f;
struct Edge{int u,v,w,next;bool operator < (const Edge &x)const {return w > x.w;}
}edge[maxn*(maxn-1)];
int tot = 0,head[maxn],dis[maxn];
bool vis[maxn];void init()
{tot = 0;memset(head,-1,sizeof(head));
} void addedge(int u,int v,int w)
{edge[tot] = (Edge){u,v,w,head[u]};head[u] = tot++;
}int prim()
{int sum = 0;priority_queue<Edge>que;Edge p;memset(dis,INF,sizeof(dis));memset(vis,false,sizeof(vis));p.v = 1;que.push(p);dis[1] = 0;while (!que.empty()){p = que.top();que.pop();int u = p.v;if (vis[u])    continue;vis[u] = true;sum += dis[u];for (int i = head[u];~i;i = edge[i].next){int v = edge[i].v,w = edge[i].w;if (dis[v] > w){dis[v] = edge[i].w;p.u = u,p.v = v,p.w = w;que.push(p);}}}return sum;
}int main()
{//freopen("input.txt","r",stdin);int N;while (~scanf("%d",&N) && N){int u,v,w;int len = N*(N - 1)/2;init();for (int i = 0;i < len;i++){scanf("%d%d%d",&u,&v,&w);addedge(u,v,w);addedge(v,u,w);}printf("%d\n",prim());}return 0;
}

Kruskal

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef __int64 LL;
const int maxn =  105;
struct Edge{int u,v,next;LL w;
}edge[maxn*(maxn-1)<<1];
int tot = 0,head[maxn],fa[maxn];void init(int N)
{tot = 0;memset(head,-1,sizeof(head));for (int i = 0;i <= N;i++)    fa[i] = i;
}bool cmp(struct Edge x,struct Edge y)
{return x.w < y.w;
}int find(int x)
{int r = x;while (r != fa[r]) r = fa[r];int i = x,j;while (i != r){j = fa[i];fa[i] = r;i = j;}return r;
}int main()
{//freopen("input.txt","r",stdin);int N;while (~scanf("%d",&N) && N){LL sum = 0;int len = N*(N-1)/2;init(N);for (int i = 0;i < len;i++){scanf("%d%d%I64d",&edge[i].u,&edge[i].v,&edge[i].w);}sort(edge,edge+len,cmp);for (int i = 0;i < len;i++){int fx = find(edge[i].u),fy = find(edge[i].v);if (fx != fy){fa[fx] = fy;sum += edge[i].w;}}printf("%I64d\n",sum);}return 0;
}

  

转载于:https://www.cnblogs.com/ZhaoxiCheung/p/6099070.html

HDU 1233 还是畅通工程(最小生成树)相关推荐

  1. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  2. hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)...

    赤裸裸滴最小生成树(MST),刚学的玩意,用两种方法熟练一下.(都是greedy) Kruskal方法:先对边按照代价非递减排序,再不断添加边且不产生环路,当边数=点数-1结束.判断加入(v,w)是否 ...

  3. HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)

    原题地址 http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:(最小生成树裸题)有N个村庄,给出村庄两两之间的距离,要求铺设公路,使得任何两个村庄间都可 ...

  4. hdu 1879 继续畅通工程 最小生成树

    继续畅通工程                                                                             Time Limit: 2000/ ...

  5. hdu 1879 继续畅通工程 (最小生成树)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. HDU 1879 继续畅通工程 最小生成树

    继续畅通工程 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description ...

  7. HDU 1233 - 还是畅通工程

    Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直 ...

  8. hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊  就是注意一点 输入边的信息时,角标 ...

  9. HDU 1233 还是畅通工程。

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1233 x 解题思路: 简单的最小生成树 实现代码: #include <iostream> ...

最新文章

  1. 永成科技C++笔试题
  2. Jmeter连接Oracle数据库
  3. https 不会被中间人攻击——因为中间人即使拿到了数据,也是加密的
  4. 【集合论】关系性质 ( 常见的关系的性质 | 关系性质示例 | 关系运算性质 )
  5. 什么是堆,栈,内存泄漏和内存溢出?
  6. 通达信版弘历软件指标_通达信弘历趋势王指标
  7. 2019人工智能实战 第六次作业 段峙宇
  8. 一加9硬件规格全曝光:120Hz流体屏+双重快充
  9. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
  10. ​深度学习基础 | Seq2seq+Attention
  11. Spring-web-HandlerMethodReturnValueHandler
  12. 键盘快捷键将剪贴板内容粘贴到命令提示符窗口(Win XP)[关闭]
  13. Leetcode 312 打气球 Burst Balloons C++ 史上最详细题解系列
  14. 拼多多推广中出价是越高效果越好吗?
  15. Vue中href属性动态拼接
  16. sql 查找一个月内数据
  17. 计算机word实线边框在哪,4.22 Word 2016 形状轮廓(边框)设置(实线、渐变线)-Word2016入门进阶教程-亮术网...
  18. 微信小程序如何返回到上一个页面,并刷新页面呢?
  19. 应用ast抽象语法树修改js函数
  20. win7怎么设置计算机的性能,windows7旗舰版电脑如何为电脑设置高性能计划

热门文章

  1. UBUNTU : Destination Host Unreachable
  2. 小旭的互联网营销之微信营销
  3. GridView 移除模板列
  4. 怎么去掉Flex4生成的SWF加载时的进度条
  5. 关于异地高考引发的又一次舆论攻势
  6. 2011年的MVP礼包
  7. 光落在你脸上,可爱一如往常
  8. MySQL之数据库对象查看工具mysqlshow
  9. C#获取刚插入的数据的id
  10. MySQL安装与设置