hdu 1875 暢通工程再續 (最小生成樹)
阿新 • • 發佈:2018-12-13
相信大家都聽說一個“百島湖”的地方吧,百島湖的居民生活在不同的小島中,當他們想去其他的小島時都要通過劃小船來實現。現在政府決定大力發展百島湖,發展首先要解決的問題當然是交通問題,政府決定實現百島湖的全暢通!經過考察小組RPRush對百島湖的情況充分了解後,決定在符合條件的小島間建上橋,所謂符合條件,就是2個小島之間的距離不能小於10米,也不能大於1000米。當然,為了節省資金,只要求實現任意2個小島之間有路通即可。其中橋的價格為 100元/米。
Input
輸入包括多組資料。輸入首先包括一個整數T(T <= 200),代表有T組資料。 每組資料首先是一個整數C(C <= 100),代表小島的個數,接下來是C組座標,代表每個小島的座標,這些座標都是 0 <= x, y <= 1000的整數。
Output
每組輸入資料輸出一行,代表建橋的最小花費,結果保留一位小數。如果無法實現工程以達到全部暢通,輸出”oh!”.
Sample Input
2 2 10 10 20 20 3 1 1 2 2 1000 1000
Sample Output
1414.2 oh!
把int變成了double。處理double時候用%lf,其他的不變
#pragma GCC optimize(2) #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<queue> using namespace std; const int maxn = 10005; const int inf = 0x3f3f3f3f; typedef long long ll; struct node { double u, v; int id; }edge[maxn]; struct node1 { int id1, id2; double w; }edge1[maxn]; int f[105]; int n, m; int find(int x) { if (x == f[x]) { return x; } else { return f[x] = find(f[x]); } } void _union(int a, int b) { int x = find(a); int y = find(b); if (x != y) { f[x] = y; } return; } bool cmp(node1 &a, node1 &b) { return a.w < b.w; } int main() { //freopen("C://input.txt", "r", stdin); int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int tot; int oi = 0; int flag = 1; double sum = 0; for (int i = 0; i <= n; i++) { f[i] = i; } for(int i = 1;i <= n; i++) { double u, v; scanf("%lf%lf", &u, &v); edge[i].id = i; edge[i].u = u; edge[i].v = v; } tot = 0; for (int i = 1; i <= n; i++) { for (int j = i+1; j <= n; j++) { if (i != j) { edge1[tot].id1 = i; edge1[tot].id2 = j; double op = (edge[j].u - edge[i].u)*(edge[j].u - edge[i].u); double po = (edge[j].v - edge[i].v)*(edge[j].v - edge[i].v); edge1[tot++].w = sqrt(op + po); } } } sort(edge1, edge1 + tot, cmp); for (int i = 0; i < tot; i++) { if (edge1[i].w < 10 || edge1[i].w > 1000) { continue; } int x = find(edge1[i].id1); int y = find(edge1[i].id2); if (x != y) { f[x] = y; oi++; sum += edge1[i].w * 100; } } if (oi==n-1) { printf("%.1lf\n", sum); } else { printf("oh!\n"); } } return 0; }