hdu 1875 畅通工程再续(最小生成树Kruskal)
2010-09-16 14:38
459 查看
/* Author: ACb0y Date: 2010年9月16日12:09:35 Type: MST Kruskal ProblemId: hdu 1875 畅通工程再续 Result: 2960804 2010-09-16 12:10:08 Accepted 1875 312MS 496K 1715 B C++ ACb0y */ #include <iostream> #include <cmath> using namespace std; #define inf 999999999.9 struct Point { double x; double y; }; struct edge { int x; int y; double w; }; int n; int father[110]; Point points[110]; double g[110][110]; edge edges[10100]; double get_dis(int a, int b) { return sqrt((points[a].x - points[b].x) * (points[a].x - points[b].x) + (points[a].y - points[b].y) * (points[a].y - points[b].y)); } int find(int x) { if (x != father[x]) { return find(father[x]); } return x; } int cmp(const void * a, const void * b) { edge * pa = (edge *) a; edge * pb = (edge *) b; return pa->w > pb->w ? 1 : -1; } void MST_Kruskal(int n) { int i, j; for (i = 1; i <= n; i++) { father[i] = i; } int c = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { edges[c].w = g[i][j]; edges[c].x = i; edges[c].y = j; c++; } } double ans = 0; int flag = 1; qsort(edges, c, sizeof(edge), cmp); for (i = 0; i < c; i++) { int x = find(edges[i].x); int y = find(edges[i].y); if (x != y) { if (edges[i].w == inf) { flag = 0; break; } ans += edges[i].w; father[x] = y; } } if (flag) { printf("%.1lf/n", ans * 100); } else { printf("oh!/n"); } } int main() { int t; int i, j; #ifndef ONLINE_JUDGE freopen("1875.txt", "r", stdin); #endif cin >> n; while (n--) { cin >> t; for (i = 1; i <= t; i++) { scanf("%lf%lf", &points[i].x, &points[i].y); } for (i = 1; i <= t; i++) { for (j = 1; j <= t; j++) { double temp = get_dis(i, j); if (temp >= 10.0 && temp <= 1000.0) { g[i][j] = temp; } else { g[i][j] = inf; } } } MST_Kruskal(t); } return 0; }
相关文章推荐
- HDU---1875 畅通工程再续 最小生成树 (kruskal)
- HDU 1875 畅通工程再续【最小生成树Kruskal】
- HDU 1875 畅通工程再续(最小生成树-Kruskal)
- 【解题报告】 HDU 1875 畅通工程再续 Kruskal最小生成树 一点关于浮点型在计算机中储存的分析
- HDU 1875 畅通工程再续(最小生成树-Kruskal)
- hdu 1875 畅通工程再续(最小生成树 kruskal)
- HDU 1875 畅通工程再续(最小生成树 kruskal)
- HDU-1875 畅通工程再续-1162 - Eddy's picture(最小生成树,Kruskal 算法实现 )
- HDU 1875 畅通工程再续 (prim最小生成树)
- HDU 1875 畅通工程再续 最小生成树
- HDU1879 继续畅通工程 【图论】【最小生成树】【Kruskal】
- HDU - 1863[畅通工程] 最小生成树Kruskal
- hdu 1875 畅通工程再续 最小生成树
- hdu 1875 畅通工程再续(最小生成树)
- 【最小生成树+kruskal】杭电 hdu 1233 还是畅通工程
- HDU-1875-畅通工程再续-最小生成树
- 畅通工程再续 - HDU 1875 - 最小生成树
- hdu-1875-畅通工程再续-最小生成树
- 【HDU 1875】畅通工程再续(最小生成树-水题)
- HDOJ 1875 畅通工程再续 最小生成树 kruskal && prim