hdu 1875 最小生成树 点用坐标表示
2015-04-08 21:26
148 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1875
题目大意:中文题
就是说找出怎么样修的路最短,然后还需要判断一下是否能修出这样一条路。
这次找了好久的错误orzzzzzzzz第一个错误在于约束条件是不小于10不大于1000,说明要有等于号。。
第二个错误kruskal判断边的两点不在一个集合后应该要将这两个集合合并。。。几天没写居然忘了这个orzzzz熟练度还不够。。
还有就是要判断下是否有最小生成树存在,可能由于边不满足约束条件,导致并不是连通图,不存在最小生成树。
看了别人的博客好像用Prim会更方便一点,明天prim重写一遍,巩固一下。
kruskal代码:
题目大意:中文题
就是说找出怎么样修的路最短,然后还需要判断一下是否能修出这样一条路。
这次找了好久的错误orzzzzzzzz第一个错误在于约束条件是不小于10不大于1000,说明要有等于号。。
第二个错误kruskal判断边的两点不在一个集合后应该要将这两个集合合并。。。几天没写居然忘了这个orzzzz熟练度还不够。。
还有就是要判断下是否有最小生成树存在,可能由于边不满足约束条件,导致并不是连通图,不存在最小生成树。
看了别人的博客好像用Prim会更方便一点,明天prim重写一遍,巩固一下。
kruskal代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define M 100009 struct { double x,y; }point[1009]; int r[M],u[M],v[M]; int p[M]; double w[M]; double ans; int k,n; int cmp(int a,int b) { return w[a] < w[b]; } int find(int x) { return x==p[x]?x:p[x]=find(p[x]); } bool kruskal() { int num = 0; for(int i = 0;i < k;i++) { int e = r[i]; int x = find(u[e]); int y = find(v[e]); if(x!=y) { p[x] = y; //不要忘记合并两个集合orzzzzzzzzz WA到吐 !!千万注意 ans += w[e]; num++; } } if(num < n-1) //如果有最小生成树那么num必定为n-1 return false; return true; } int main() { int t; scanf("%d",&t); while(t--) { memset(point,0,sizeof(point)); scanf("%d",&n); ans = 0; for(int i = 0;i < n;i++) p[i] = i; for(int i = 0;i < n;i++) scanf("%lf %lf",&point[i].x,&point[i].y); k = 0; for(int i = 0;i < n;i++) { for(int j = i+1;j < n;j++) { double temp =sqrt(fabs(point[i].x-point[j].x)*fabs(point[i].x-point[j].x)+fabs(point[i].y-point[j].y)*fabs(point[i].y-point[j].y)); if(temp-1000<=0 && temp-10>=0) //要注意题目是有等号 orzzzz { //如果不满足约束条件就不把这条边加到可能选择的边中 w[k] = temp;//存入这条边长度 u[k] = i; //记录起点终点 v[k] = j; k++; } } } for(int i = 0;i < k;i++) r[i] = i; sort(r,r+k,cmp); bool ok = kruskal(); if(!ok) printf("oh!\n"); else printf("%.1f\n",100*ans); } return 0; }
相关文章推荐
- HDU-1875 最小生成树 PRIM
- HDU 1875 畅通工程再续(Kruscal最小生成树)
- HDU 1875 畅通工程再续 最小生成树(简单题)
- hdu 1875 畅通工程再续 最小生成树
- hdu 1875 最小生成树+并查集
- HDU-1875(综合最小生成树)
- HDU 1875 畅通工程再续 最小生成树问题
- (step6.1.3)hdu 1875(畅通工程再续——最小生成树)
- hdu 1875 畅通工程再续(最小生成树Kruskal)
- hdu 1875 最小生成树(kruskal)
- 【解题报告】 HDU 1875 畅通工程再续 Kruskal最小生成树 一点关于浮点型在计算机中储存的分析
- hdu 1875 Krustal最小生成树
- 最小生成树 Prim (hdu 1875)
- (step6.1.3)hdu 1875(畅通工程再续——最小生成树)
- 【最小生成树+Prim】杭电 hdu 1875 畅通工程再续
- hdu 1875 畅通工程再续 最小生成树
- hdu 1875 Krustal最小生成树
- hdu 1875 畅通工程再续(最小生成树)
- HDU 1875 畅通工程再续 最小生成树
- hdu 1875 畅通工程再续(最小生成树,基础)