1 条题解
-
0
C++ :
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; struct jiegouti { int a,b,k; float v; }T[6000]; int r[6000]; int f[6000]; int paixu(jiegouti a,jiegouti b) { if(a.v < b.v ) return 1; if(a.v > b.v ) return 0; if(a.v == b.v ) { if( a.k<b.k ) return 1; return 0; } } int find(int x) { if(x==f[x]) return x; f[x]=find(f[x]); return f[x]; } void bing (int x,int y) { x=find(x); y=find(y); if(x!=y) f[y]=x; } int main() { // freopen("road.in","w",stdin); // freopen("road.out","w",stdout); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++) { for(int w=1;w<=n;w++) f[w]=w; scanf("%d%d%f",&T[i].a,&T[i].b,&T[i].v); T[i].k=i; sort(T+1,T+i+1,paixu); int c=0,l=1; float sum=0; bool z=0; for(int j=1;j<=i;j++) { if(find(T[j].a) != find(T[j].b)) { bing(T[j].a,T[j].b); c++; sum+=T[j].v; r[l]=T[j].k; l++; } if(c==n-1) { sum/=2; printf("%.2f",sum); printf(" "); sort(r+1,r+c+1); for(int l=1;l<=c;l++) { printf("%d",r[l]); printf(" "); } printf("\n"); z=1; break; } } if(z==0) { printf("0"); printf("\n"); } } }
- 1
信息
- ID
- 1471
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者