畅通工程(kruskal算法)
个人心得:日了狗,WR了俩个小时才发现是少了个vector清理,我也是醉了,不过后面还是对这个有了更好得了解,一是我得算法,而是学长改进
后的算法,改进后得算法还要判断所有村庄是否在连在一起,其实我觉得实必要性不大。
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 #include<algorithm> 6 using namespace std; 7 const long long maxa=99999999; 8 int n,m; 9 struct village 10 { 11 int v; 12 int e; 13 int w; 14 village(int x,int y,int z){ 15 v=x,e=y,w=z; 16 } 17 village(){} 18 bool operator <(const village &V)const 19 { 20 return w<V.w; 21 22 } 23 24 }; 25 vector<village> V; 26 int book[105]; 27 void init() 28 { 29 for(int i=1;i<=m;i++) 30 book[i]=i; 31 32 } 33 int getx(int x) 34 { 35 if(book[x]!=x) 36 book[x]=getx(book[x]); 37 return book[x]; 38 } 39 void mergexy(int x,int y) 40 { 41 book[y]=x; 42 } 43 int main() 44 { 45 while(cin>>n>>m) 46 { 47 V.clear(); 48 if(n==0) break; 49 init(); 50 int t=n; 51 while(t--) 52 { 53 int x,y,z; 54 scanf("%d%d%d",&x,&y,&z); 55 village a(x,y,z); 56 V.push_back(a); 57 } 58 sort(V.begin(),V.end()); 59 int number=0; 60 long long sum=0; 61 for(int i=0;i<V.size();i++) 62 { 63 if(getx(V[i].v)!=getx(V[i].e)){ 64 mergexy(getx(V[i].v),getx(V[i].e)); 65 number++; 66 sum+=V[i].w; 67 68 } 69 if(number==m-1) break; 70 } 71 if(number==m-1) cout<<sum<<endl; 72 else cout<<"?"<<endl; 73 74 75 } 76 return 0; 77 }
转载于:https://www.cnblogs.com/blvt/p/7300914.html
畅通工程(kruskal算法)相关推荐
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊 就是注意一点 输入边的信息时,角标 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- HDU1875 畅通工程再续【Kruskal算法+并查集】
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU1233 还是畅通工程【Kruskal算法+并查集】
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1863 畅通工程【Kruskal算法+并查集】
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)...
赤裸裸滴最小生成树(MST),刚学的玩意,用两种方法熟练一下.(都是greedy) Kruskal方法:先对边按照代价非递减排序,再不断添加边且不产生环路,当边数=点数-1结束.判断加入(v,w)是否 ...
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- Kruskal HDOJ 1233 还是畅通工程
题目传送门 1 /* 2 最小生成树之kruskal算法--并查集(数据结构)实现 3 建立一个结构体,记录两点和它们的距离,依照距离升序排序 4 不连通就累加距离,即为最小生成树的长度 5 */ 6 ...
- (kruskal)还是畅通工程
题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路 ...
- 还是畅通工程(prim和kruskal)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
最新文章
- 【原生js】js动态添加dom,如何绑定事件
- 【渝粤教育】国家开放大学2018年春季 0688-21T老年精神障碍护理 参考试题
- Windows主机安全加固
- xcode -饼状进度条
- reportviewer动态数据源
- Laravel核心解读 -- Request
- C# 中的DevExpress CheckedListBoxControl控件
- php自定义函数记录一
- 面试:用 Java 实现一个 Singleton 模式
- 简单的spring mvc实例
- 上网时间监控软件_网管软件有哪一些?哪家好?
- 命令查询职责分离模式 CQRS Command Query Responsibility Segregation
- DevC++的一些使用技巧
- Kaggle——TMDB电影票房预测
- 2.遥感传感器和遥感数据
- gie拉取Can‘t update master has no tracked branch
- 洛谷 桶哥的问题——吃桶——题解
- NPOI导出Word并插入表格和图片
- 建造者模式------C++实现游戏人物的设定
- java输入十个,键盘输入十个数,输出最大数