1 条题解
-
0
C :
#include<stdio.h> #include<ctype.h> #include<string.h> #include<stdlib.h> int c[27]; typedef struct { int s,e,cost; }ROAD; int cmp(const void* pa,const void* pb) { return (*(ROAD*)pa).cost>(*(ROAD*)pb).cost; } int find(int n) { int tmp; if(c[n]==-1) return n; else { tmp=find(c[n]); c[n]=tmp; return tmp; } } int main() { int i,j,k,n,m,s,sum,a,b; char str[2],str1[2]; ROAD r[76]; while(scanf("%d",&n)!=EOF&&n!=0) { memset(c,-1,sizeof(int)*27); for(m=0,i=0;i<n-1;i++) { scanf("%s%d",str,&k); for(j=0;j<k;j++) { r[m].s=str[0]-'A'; scanf("%s%d",str1,&r[m].cost); r[m].e=str1[0]-'A'; m++; } } qsort(r,m,sizeof(ROAD),cmp); for(i=0,sum=k=0;i<m&&k!=n-1;i++) { a=find(r[i].s); b=find(r[i].e); if(a!=b) { c[a]=b; k++; sum+=r[i].cost; } } printf("%d\n",sum); } return 0; }
C++ :
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; struct node{ int x,y,len; }road[5050]; int pre[30]; int find(int x) { if(pre[x]!=x) pre[x]=find(pre[x]); return pre[x]; } int Union(int a,int b) { int x,y; x=find(a); y=find(b); if(x==y) return 1; else { pre[y]=x; return 0; } } bool cmp(node a,node b) { return a.len<b.len; } int main() { int n,m,i,j,p,q; char a,b; while(scanf("%d",&n)==1) { if(n==0) break; int k=0; for(i=1;i<n;i++) { cin>>a>>m; for(j=1;j<=m;j++) { road[k].x=a-'A'+1; cin>>b>>q; road[k].y=b-'A'+1; road[k].len=q; k++; } pre[i]=i; } pre[i]=i; sort(road,road+k,cmp); int ans=0; for(i=0;i<k;i++) { if(Union(road[i].x,road[i].y)==0) ans+=road[i].len; } printf("%d\n",ans); } return 0; }
- 1
信息
- ID
- 1145
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者