hdu 1875 Krustal最小生成树
来源:互联网 发布:adobe cc 2018mac破解 编辑:程序博客网 时间:2024/06/11 21:03
http://acm.hdu.edu.cn/showproblem.php?pid=1875
题意:求链接所有岛屿的最小生成树。中文题就不说了。
分析:kruskal算法。
用sqrt的时候ce了一次。然后数组开小了re了一次。不应该犯这种低级错误了。反思己过。
View Code
// I'm lanjiangzhou//C#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include <time.h>//C++#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <cctype>#include <stack>#include <string>#include <list>#include <queue>#include <map>#include <vector>#include <deque>#include <set>using namespace std;//*************************OUTPUT*************************#ifdef WIN32#define INT64 "%I64d"#define UINT64 "%I64u"#else#define INT64 "%lld"#define UINT64 "%llu"#endif//**************************CONSTANT***********************#define INF 0x3f3f3f3f// aply for the memory of the stack//#pragma comment (linker, "/STACK:1024000000,1024000000")//endconst int maxn = 2010;struct node{ int u,v; double w;}edges[maxn*4];int pa[maxn];int n,m;double x[maxn],y[maxn];double sumweight=0;//初始化void UFset(){ for(int i=0;i<n;i++){ pa[i]=-1; }}//查找int findset(int x){ int s; for(s=x;pa[s]>=0;s=pa[s]); while(s!=x){ int tmp=pa[x]; pa[x]=s; x=tmp; } return s;}//合并void Union(int R1,int R2){ int r1=findset(R1), r2=findset(R2); int tmp=pa[r1]+pa[r2]; if(pa[r1]>pa[r2]){ pa[r1]=r2; pa[r2]=tmp; } else { pa[r2]=r1; pa[r1]=tmp; }}int cmp(const void*a,const void*b){ node aa=*(const node*)a; node bb=*(const node*)b; if(aa.w>bb.w) return 1; else return -1;}void Kruskal(){ int num=0; int u,v; UFset(); for(int i=0;i<m;i++){ u=edges[i].u; v=edges[i].v; if(findset(u)!=findset(v)){ sumweight+=edges[i].w; num++; Union(u,v); } if(num>=n-1) break; }}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf%lf",&x[i],&y[i]); } int mi=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ double d=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); if(d>=10.0&&d<=1000.0){ edges[mi].u=i; edges[mi].v=j; edges[mi].w=d; mi++; // printf("edges[mi]=%lf\n",d); } else continue; } } m=mi; qsort(edges,m,sizeof(edges[0]),cmp); sumweight=0.0; Kruskal(); if(sumweight==0.0) printf("oh!\n"); else printf("%.1lf\n",sumweight*100); } return 0;}
- hdu 1875 Krustal最小生成树
- c++最小生成树之krustal算法
- 最小生成树(prim和krustal)
- HDU 1875(最小生成树)
- hdu 1875 最小生成树
- HDU-1875 最小生成树 PRIM
- HDU-1875(综合最小生成树)
- 最小生成树 Prim (hdu 1875)
- HDU 1875 最小生成树问题
- 【最小生成树】hdu 1875 prim
- HDU 1875 (最小生成树)
- HDU 1879 最小生成树
- HDU-1836 最小生成树
- hdu 1863 最小生成树
- hdu 1233 最小生成树
- hdu 4081 最小生成树
- hdu 1863 最小生成树
- HDU-1162(最小生成树)
- hdu 1142 最短路+记忆化深搜---好题
- hdu 1548 最小生成树dijkstra,关键建图
- hdu 2680 dijkstra反向建图
- hdu 3592 差分约束
- hdu 3666差分约束
- hdu 1875 Krustal最小生成树
- hdu 1233 Kruskal求最小生成树
- hdu 1241 dfs求连通分量个数
- hdu 1213 并查集用Kruskal算法
- hdu 1856 并查集——ac的不一定正确
- 嗨,缓过神来。
- 为了见老刘一面
- (转载)freopen()函数在ACM中的使用
- HTTP协议 (六) 状态码详解