#include #include #include #include #include using namespace std; const int maxn = 1015; const int maxm = maxn*maxn; const int inf1 = 0x3f3f3f3f; const double inf2 = 9999999999; struct Point { double x,y; }pnt[ maxn ]; struct Edge{ int u,v; double val; int id; }edge[ maxn<<1 ]; int cnt_edge; double mat[ maxn ][ maxn ]; double dis[ maxn ]; bool vis[ maxn ]; int pre[ maxn ]; double LenPrim1; double LenPrim2; int fa[ maxn ],ran[ maxn ]; int find( int x ){ if( x==fa[x] ) return x; else return fa[ x ] = find( fa[x] ); } void init( int n ){ for( int i=0;idis[j] ){ M = dis[j]; id = j; } } if( id==-1 ) break; vis[ id ] = true; ans += M; edge[ cnt_ ].u = pre[ id ]; edge[ cnt_ ].v = id; edge[ cnt_ ].id = Belong; edge[ cnt_ ].val = mat[ id ][ pre[id] ]; cnt_edge ++ ; for( int j=0;jmat[id][j] ){ dis[j] = mat[id][j]; pre[ j ] = id; } } } return ans; } void Deal( int n ){ for( int i=0;ians ) ans = temp_ans; } } printf("%.2lf\n",ans*k); } return 0; }