2 条题解
-
0
#include<bits/stdc++.h> using namespace std; struct edge{int x,y,c;}a[60000];int alen; bool cmp(edge n1,edge n2){return n1.c<n2.c;} int fa[310]; int findfa(int x){ return fa[x]= (fa[x]==x)? fa[x] : findfa(fa[x]); } int b[302][302]; int main() { int n;scanf("%d",&n); for(int i=1;i<=n;i++)//地球为第n+1个点 { int x; scanf("%d",&x); b[i][n+1]=b[n+1][i]=x; } for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) scanf("%d",&b[i][j]); n++; alen=0; for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)a[++alen]=edge{i,j,b[i][j]}; sort(a+1,a+alen+1,cmp); for(int i=1;i<=n;i++) fa[i]=i; int ans=0,t=0; for(int i=1;i<=alen;i++) { int tx=findfa(a[i].x); int ty=findfa(a[i].y); if( tx!=ty) { fa[ty]=tx; ans=ans+a[i].c; t++;if(t==n-1) break; } } printf("%d\n",ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; struct edge{int x,y,c;}a[60000];int alen; bool cmp(edge n1,edge n2){return n1.c<n2.c;} int fa[310]; int findfa(int x){ return fa[x]= (fa[x]==x)? fa[x] : findfa(fa[x]); } int b[302][302]; int main() { int n;scanf("%d",&n); for(int i=1;i<=n;i++)//地球为第n+1个点 { int x; scanf("%d",&x); b[i][n+1]=b[n+1][i]=x; } for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) scanf("%d",&b[i][j]); n++; alen=0; for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)a[++alen]=edge{i,j,b[i][j]}; sort(a+1,a+alen+1,cmp); for(int i=1;i<=n;i++) fa[i]=i; int ans=0,t=0; for(int i=1;i<=alen;i++) { int tx=findfa(a[i].x); int ty=findfa(a[i].y); if( tx!=ty) { fa[ty]=tx; ans=ans+a[i].c; t++;if(t==n-1) break; } } printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 264
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 85
- 已通过
- 52
- 上传者