畅通工程.docx
- 文档编号:22878778
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:8
- 大小:15.88KB
畅通工程.docx
《畅通工程.docx》由会员分享,可在线阅读,更多相关《畅通工程.docx(8页珍藏版)》请在冰豆网上搜索。
畅通工程
还是畅通工程
TimeLimit:
4000/2000MS(Java/Others) MemoryLimit:
65536/32768K(Java/Others)
TotalSubmission(s):
2762 AcceptedSubmission(s):
1303
ProblemDescription
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。
请计算最小的公路总长度。
Input
测试输入包含若干测试用例。
每个测试用例的第1行给出村庄数目N(<100);随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。
为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
SampleInput
3
121
132
234
4
121
134
141
233
242
345
0
SampleOutput
3
5
Hint
Hint
Hugeinput,scanfisrecommended.
在做并查集时无意中看到的还A了纪念一下自己的第一道最小生成树
#include"stdio.h"
#include"stdlib.h"
struct
{
intc;
inta;
intb;
}cun[5000];
inthe[150],h[150];
intcmp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}
intfind(intx)
{
intr;
r=x;
while(he[r]!
=r)
{
r=he[r];
}
he[x]=r;
returnr;
}
intbin(inti)
{
intx,y;
x=cun[i].a;
y=cun[i].b;
x=find(x);
y=find(y);
if(x==y)return0;
else
{
if(h[x]>h[y])he[y]=x;
elseif(he[x] else { he[x]=y; h[x]++; } returncun[i].c; } } intmain() { intn,i,j,pp,t,p; while(scanf("%d",&n)! =EOF,n) { for(i=0;i<=n;i++) { he[i]=i; h[i]=1; } pp=n*(n-1)/2; for(i=1;i<=pp;i++) { scanf("%d%d%d",&cun[i].a,&cun[i].b,&cun[i].c); } qsort(cun,pp+1,sizeof(cun[0]),cmp); i=1;t=0; while(n>1) { p=bin(i); if(p) { n--; t+=p; } i++; } printf("%d\n",t); } return0; } 畅通工程 ProblemDescription 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。 省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。 问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。 每个测试用例的第1行给出两个正整数,分别是城镇数目N(<1000)和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。 为简单起见,城镇从1到N编号。 注意: 两个城市之间可以有多条道路相通,也就是说 33 12 12 21 这种输入也是合法的 当N为0时,输入结束,该用例不被处理。 Output 对每个测试用例,在1行里输出最少还需要建设的道路数目。 SampleInput 42 13 43 33 12 13 23 52 12 35 9990 0 SampleOutput 1 0 2 998 这是我的第一道并查集虽然题目相对比较简单但还是值得纪念 题意: n个城镇有m条路并将这m条路连接的两个城镇给出来问需要再建设多少条路可以让这n个城镇连通 #include"stdio.h" intbing[1050]; intcha(intx)//查找到该点的根 { intr=x; while(bing[r]! =r) r=bing[r]; returnr; } inthe(intx,inty)//如果两个点的根不一样就修改两个点的根也就是让第一个点的根指向 {//第二个点的根 intfx,fy; fx=cha(x); fy=cha(y); if(fx! =fy) bing[fx]=fy; return0; } intmain() { intn,m,a,b,t,i; while(scanf("%d",&n)! =EOF) { if(n==0)return0; for(i=1;i<=n;i++) bing[i]=i; scanf("%d",&m); for(i=0;i { scanf("%d%d",&a,&b); he(a,b); } t=-1; for(i=1;i<=n;i++)//将所有的城镇统计出还没有被连接的就行了 { if(bing[i]==i)t++; } printf("%d\n",t); } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 畅通 工程