标签:des style blog http color os io for
题意:给你N个点的坐标,求连通图的最小距离。
思路:计算每两个点之间的距离,然后转化成为畅通工程题。
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<math.h> 6 #include<algorithm> 7 #define LL long long 8 #define mod 1e9 + 7 9 const int M = 105; 10 11 using namespace std; 12 13 struct node{ 14 int x; 15 int y; 16 double value; 17 }a[M * M >> 1]; 18 19 int cun[M]; 20 21 double dis(double x1, double y1, double x2, double y2) 22 { 23 return sqrt(1.0 * (x1 - x2) * (x1 - x2) + 1.0 * (y1 - y2) * (y1 - y2)); 24 } 25 26 bool cmp(node a, node b) 27 { 28 return a.value < b.value; 29 } 30 31 int find(int x) 32 { 33 return cun[x] == x ? x : cun[x] = find(cun[x]); 34 } 35 36 void shu(int x, int y) 37 { 38 int p = find(x); 39 int q = find(y); 40 if(p != q) 41 cun[p] = q; 42 } 43 44 int main() 45 { 46 int n; 47 double s[M], e[M]; 48 while( cin >> n ) 49 { 50 int temp = 1; 51 for(int i = 1; i <= n; ++i) 52 cin >> s[i] >> e[i]; 53 for(int i = 1; i <= n; ++i) 54 for(int j = i + 1; j <= n; ++j) 55 { 56 a[temp].x = i; 57 a[temp].y = j; 58 a[temp].value = dis(s[i],e[i],s[j],e[j]); 59 temp++; 60 } 61 for(int i = 0; i <= n; ++i) 62 cun[i] = i; 63 sort(a,a + temp,cmp); 64 double ans = 0; 65 for(int i = 1; i < temp; ++i) 66 { 67 if(find(a[i].x) != find(a[i].y)) 68 { 69 shu(a[i].x,a[i].y); 70 ans += a[i].value; 71 } 72 } 73 printf("%.2lf\n",ans); 74 } 75 return 0; 76 }
hdu 1162 Eddy's picture(最小生成树),布布扣,bubuko.com
hdu 1162 Eddy's picture(最小生成树)
标签:des style blog http color os io for
原文地址:http://www.cnblogs.com/Unico-liyang/p/3893868.html