hdu 1875 畅通工程再续(图论:最小生成树)
2014-07-21 12:10
381 查看
简单图论题,就是在求最小生成树的基础上限定了边长度必须在10-1000之内才能连边
题目中用sqrt()没强制转换参数为double类型跪了2次
把题目要求看成了边长度必须在10-100内跪了1次...
代码如下:
题目中用sqrt()没强制转换参数为double类型跪了2次
把题目要求看成了边长度必须在10-100内跪了1次...
代码如下:
<span style="font-size:18px;">#include <cmath> #include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define LL long long using namespace std; int c, cnt; int u[MAXN], v[MAXN], r[MAXN], p[MAXN]; double ans, w[MAXN]; struct Point { int x, y; }a[MAXN]; int find(int x) { return x==p[x] ? x : p[x] = find(p[x]); } double get_dis(int i, int j) { return sqrt(pow(1.0*(a[i].x-a[j].x), 2.0) + pow(1.0*(a[i].y-a[j].y), 2.0)); } int cmp(int i, int j) { return w[i]<w[j]; } bool judge() {//判断能否建成最小生成树 int i, cnts = 0; for(i=0; i<c; ++i) if(p[i] == i) cnts++; if(cnts == 1) return true; return false; } bool Kruskal() { int i, j, e, x, y; ans = 0.0; for(i=0; i<c; ++i) p[i] = i; for(i=0; i<cnt; ++i) r[i] = i; sort(r, r+cnt, cmp); for(i=0; i<cnt; ++i) { e = r[i]; x = find(u[e]); y = find(v[e]); if(w[e]>=10.0&&w[e]<=1000.0 && x != y) { p[x] = y; ans += w[e]; } } return judge(); } int main(void) { int T, i, j; scanf("%d", &T); while(T--) { scanf("%d", &c); for(i=0; i<c; ++i) { scanf("%d%d", &a[i].x, &a[i].y); } cnt = 0; for(i=0; i<c; ++i) { for(j=i+1; j<c; ++j) { u[cnt] = i; v[cnt] = j; w[cnt] = get_dis(i, j); cnt++; } } if(Kruskal()) printf("%.1f\n", ans*100); else cout << "oh!" << endl; } return 0; }</span>
相关文章推荐
- hdu 1875畅通工程再续-prim最小生成树
- hdu 1875 畅通工程再续 最小生成树
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
- hdu 1233 还是畅通工程(图论:最小生成树)
- hdu 1875 畅通工程再续(prim方法求得最小生成树)
- HDU 1875 畅通工程再续 最小生成树
- HDU-1875-畅通工程再续-最小生成树
- hdu 1875 畅通工程再续(最小生成树)
- hdu 1875 畅通工程再续(最小生成树)
- hdu 1875畅通工程再续(最小生成树)
- hdu 1875 畅通工程再续(最小生成树)
- HDU 1875 畅通工程再续 最小生成树(简单题)
- hdu-1875-畅通工程再续-最小生成树
- HDU 1875 畅通工程再续(Kruscal最小生成树)
- 【解题报告】 HDU 1875 畅通工程再续 Kruskal最小生成树 一点关于浮点型在计算机中储存的分析
- 畅通工程再续_hdu 1875(并查集+最小生成树).java
- hdu 1875 畅通工程再续(最小生成树,基础)
- HDU 1875 畅通工程再续 (最小生成树 水)
- HDU-1875 畅通工程再续-1162 - Eddy's picture(最小生成树,Kruskal 算法实现 )
- HDU 1875 畅通工程再续(最小生成树)