HDU 1233 还是畅通工程(最小生成树)
传送门
还是畅通工程
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 还是畅通工程(最小生成树)相关推荐
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)...
赤裸裸滴最小生成树(MST),刚学的玩意,用两种方法熟练一下.(都是greedy) Kruskal方法:先对边按照代价非递减排序,再不断添加边且不产生环路,当边数=点数-1结束.判断加入(v,w)是否 ...
- HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)
原题地址 http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:(最小生成树裸题)有N个村庄,给出村庄两两之间的距离,要求铺设公路,使得任何两个村庄间都可 ...
- hdu 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit: 2000/ ...
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- HDU 1233 - 还是畅通工程
Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直 ...
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊 就是注意一点 输入边的信息时,角标 ...
- HDU 1233 还是畅通工程。
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1233 x 解题思路: 简单的最小生成树 实现代码: #include <iostream> ...
最新文章
- 永成科技C++笔试题
- Jmeter连接Oracle数据库
- https 不会被中间人攻击——因为中间人即使拿到了数据,也是加密的
- 【集合论】关系性质 ( 常见的关系的性质 | 关系性质示例 | 关系运算性质 )
- 什么是堆,栈,内存泄漏和内存溢出?
- 通达信版弘历软件指标_通达信弘历趋势王指标
- 2019人工智能实战 第六次作业 段峙宇
- 一加9硬件规格全曝光:120Hz流体屏+双重快充
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
- ​深度学习基础 | Seq2seq+Attention
- Spring-web-HandlerMethodReturnValueHandler
- 键盘快捷键将剪贴板内容粘贴到命令提示符窗口(Win XP)[关闭]
- Leetcode 312 打气球 Burst Balloons C++ 史上最详细题解系列
- 拼多多推广中出价是越高效果越好吗?
- Vue中href属性动态拼接
- sql 查找一个月内数据
- 计算机word实线边框在哪,4.22 Word 2016 形状轮廓(边框)设置(实线、渐变线)-Word2016入门进阶教程-亮术网...
- 微信小程序如何返回到上一个页面,并刷新页面呢?
- 应用ast抽象语法树修改js函数
- win7怎么设置计算机的性能,windows7旗舰版电脑如何为电脑设置高性能计划