还是畅通工程

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

Problem 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

3 5

这题我交了九遍,根本想不出哪儿错了,然后搜博客,发现别人用克鲁斯卡尔的都好巨大,

终于,我把juge()换到了ans+= 的后面,就ac了。

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
struct node
{int a,b,w;
}f[6010];
int vis[5000];
bool cmp(node a,node b)
{return a.w<b.w;
}
int ans;
int n,m;
bool juge()
{for(int i=1;i<=m-1;i++)if(vis[i]!=vis[i+1])return 0;return 1;
}
int find(int x)
{int r=x,i=x,j;while(vis[r]!=r)r=vis[r];while(r!=i){j=vis[i];vis[i]=r;i=j;}return r;
}
int merg(int a,int b)
{a=find(a);b=find(b);if(a==b)return 0;if(a>b)vis[a]=b;if(a<b)vis[b]=a;return 1;
}
void kusal()
{ans=0;for(int i=1;i<=n;i++)vis[i]=i;for(int i=1;i<=m;i++){if(merg(f[i].a,f[i].b))ans+=f[i].w;if(juge())break;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);while(cin>>n,n!=0){vis[0]=-1;memset(f,0,sizeof f);memset(vis,0,sizeof vis);m=(n-1)*n/2;for(int i=1;i<=m;i++)cin>>f[i].a>>f[i].b>>f[i].w;sort(f+1,f+m+1,cmp);kusal();cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/37kiazz73/p/10316871.html

HDOJ 1233 (克鲁斯卡尔+并查集)相关推荐

  1. HDOJ 畅通工程 1232(并查集入门)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...

  3. 还是畅通工程(克鲁斯卡尔算法+并查集)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  4. 并查集的一些个人观点 以及克鲁斯卡尔算法的详解

    先抛出个问题,什么是并查集,它有什么用? 看我这篇Blog的人想必就为了弄明白,下面写出我个人的一些观点. 1 什么是并查集,以及并查集要完成的目标. 举个例子,通火车要修路,已经修了一部分了,但各个 ...

  5. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

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

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

  7. 并查集 HDOJ 5441 Travel

    题目传送门 题意:给一张无向图,问存在多少(a, b)表示a点到b点经过的边值小于等于x ((a,b) 和 (b, a)属于不同的方案) 分析:首先将边权值和查询x值升序排序,从前往后扫描边,累加从u ...

  8. HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...

  9. 路径空间HDOJ 4514 - 湫湫系列故事——设计风景线 并查集+树型DP

    最近研究路径空间,稍微总结一下,以后继续补充: 题意有没说楚清的...两点间最多一条路径.... 先用并查集检查无向图否是有环... 若干个无环的无向图就是一丛林了... 那么目题转化为在一棵树上找最 ...

最新文章

  1. 从互联网大脑模型看腾讯与今日头条之争
  2. l3fwd 是什么_服务器DPDK l3fwd性能测试
  3. SD卡驱动分析(一)
  4. 13.8 线程的安全问题和解决方法
  5. linux generic什么意思_Linux下ps aux中进程状态为Ss,S+, Rs,Ds是什么意思?
  6. ionic 侧栏菜单用法
  7. 【Firewalld(Iptables)】
  8. jsp 文件使用 include指令 导入 jspf 分析,及导入jspf 文件后出现乱码问题
  9. java确定随机数组的范围_Java程序以生成一定范围内的随机数数组并获取最小值和最大值...
  10. JVM内存与垃圾回收篇
  11. 《手把手教你学DSP-基于TMS320F28335》书中的错误
  12. DB2 SQLCODE常见错误代码
  13. PHP在线预览word文档的功能
  14. 网络型多媒体计算机教室功能是,多媒体网络教室中的信息技术教学
  15. 如何免费下载知网文献_知网文献下载工具_知网下载器Cnkidownloader
  16. Android webview数据获取 webview抓取
  17. C# MVC 过滤器
  18. autoCAD恐吓式销售_恐吓式软文的例子?恐吓式软文营销经典案例分享
  19. LOD(Levels of detail)细节层次3D优化
  20. chatbot聊天机器人技术路线汇总

热门文章

  1. 【树莓派学习笔记】二、(无屏幕)SSH远程登录、图形界面及系统配置
  2. 微信小程序入门二: 条件、遍历、网络请求、获取本地图片
  3. Linux C 算法分析初步
  4. 关于头文件中的 static inline函数
  5. [html] 你知道什么是粘性布局吗?
  6. PS教程第二课:PS安装
  7. [vue] SPA单页面的实现方式有哪些?
  8. [css] 你有用过CSS预处理器吗?喜欢用哪个?原理是什么?
  9. [css] 移动页面底部工具条有3个图标,如何平分?在设置边框后最后一个图标掉下去了怎么办?
  10. 前端学习(2747):uniapp环境搭建