暑期集训之畅通工程1
来源:互联网 发布:卫卫网域名怎么备案 编辑:程序博客网 时间:2024/06/06 09:59
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
3 31 2 11 3 22 3 41 32 3 20 100
3?
基本上也是套模板做的,就模板内容来说没啥大区别 经典的kru啥算法模板,但就是在?这个输出上有点麻烦,但其实也就是根据看下在整个程序完成后有多少个根节点 如果根节点等于一个的话就代表可以连通 反之代表不能连通,输出?(注意 一定是先判断连通的情况 不然就WA了QAQ),代码如下:
#include<stdio.h>#include<string.h>#include<algorithm>#define N 100010using namespace std;int par[N];int hight[N]; struct edge{ int u,v,cost;};edge G[N];int E,V;void Init_union_find(int n){ for(int i=0; i<=n; i++) { par[i]=i; hight[i]=0; }}int find(int x){ if(par[x]==x) return x; else return par[x]=find(par[x]);}void unite(int x,int y){ x=find(x); y=find(y); if(x==y) return ; if(hight[x]<hight[y]) par[x]=y; else { par[y]=x; if(hight[x]==hight[y]) hight[x]++; }}bool same(int x,int y){ return find(x)==find(y);}bool cmp(edge a,edge b){ return a.cost<b.cost;}int kruskal(){ sort(G,G+E,cmp); Init_union_find(V); int ans=0; for(int i=0; i<E; i++) { edge e=G[i]; if(!same(e.u,e.v)) { unite(e.u,e.v); ans+=e.cost; } } return ans;}int main(){while(scanf("%d %d",&E,&V)&&E){ for(int i=0;i<E;i++){scanf("%d %d %d",&G[i].u,&G[i].v,&G[i].cost);}int k;k=kruskal();int h=0;for(int i=1;i<=V;i++){if(find(i)==i)h++;}if(h==1)printf("%d\n",k);elseprintf("?\n");}return 0;}
总的来说 就是模板题
阅读全文
0 0
- 暑期集训之畅通工程1
- 暑期集训之还是畅通工程
- 暑期集训之最小公倍数
- 暑期集训之cake
- 暑期集训之Array
- 暑期集训之ZOJ
- 暑期集训之哈夫曼树
- 暑期集训之Subsequence
- 暑期集训之pie
- 暑期集训之Highways
- 暑期集训之感
- 暑期集训 Contest 1
- 暑期集训之最大公约数问题
- 暑期集训之立方求和
- 暑期集训之EXCEL排序
- 暑期集训之稳定排序
- 暑期集训之寻找大富翁
- 暑期集训之阶乘之和
- 《tensorflow实战》学习3——实现简单的卷积神经网络
- 思想小结--one
- Toast,Dialog,PopupWindow,Notifaction
- 浅谈一类积性函数的前缀和
- pitch yaw roll 的区别
- 暑期集训之畅通工程1
- 数组实现单调栈
- Vue2.0 propsData
- JS实现滚动窗口
- 说说ArrayList的ConcurrentModificationException
- SCU 1114:数字三角(动态规划)
- 签名算法
- Glide开源库存在的暗坑
- Java程序猿学习当中各个阶段的建议,想收藏但是说我没登录so干脆就复制过来了