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
- 难度
- 3
- 标签
- 递交数
- 41
- 已通过
- 25
- 上传者