4 条题解
- 
  1
kruskal
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n,sum,cnt,num=0; int fa[110]; struct node{ int x,y,z; }edg[26000]; void init(){ for(int i=1;i<=n;i++) fa[i] = i; } bool cmp(node a ,node b) { return a.z < b.z; } int find(int x){ return x==fa[x] ? fa[x] : fa[x]=find(fa[x]); } void kruskal(){ sum = cnt = 0; sort(edg+1,edg+1+num,cmp); // for(int i=1;i<=num;i++){ // cout<<edg[i].x<<" "<<edg[i].y<<" "<<edg[i].z<<endl; // } for(int i = 1 ;i <= num ; i++) { int x = find(edg[i].x); int y = find(edg[i].y); if(x!=y) { sum += edg[i].z; // cout<<i<<" "<<edg[i].z<<" /// "<<endl; cnt++; fa[x] = y; if(cnt == n-1) break; } } cout<<sum<<endl; } int main(){ while(cin>>n&&n){ num = 0; memset(edg,0,sizeof(edg)); char p,pp; int k; for(int i=1;i<n;i++){ cin>>p; cin>>k; for(int j=1;j<=k;j++){ cin>>pp; edg[++num].x = p-'A' + 1; edg[num].y = pp-'A' + 1; cin>>edg[num].z; num++; } if(k) num--; } init(); kruskal(); } return 0; } 
信息
- ID
 - 1326
 - 时间
 - 1000ms
 - 内存
 - 256MiB
 - 难度
 - 2
 - 标签
 - 递交数
 - 43
 - 已通过
 - 27
 - 上传者