hdu 1162 && hdu 1875
2011-08-16 18:25
218 查看
这来到题目差不多,因为几乎是每条边都用到,所以用prim算法应该会比较好,从运行的效率来看也十分明显
hdu1875 则对边做了一定的限制,只需要的加边的时候判断一下就好了
hdu 1875 Kruskal算法
hdu1875 则对边做了一定的限制,只需要的加边的时候判断一下就好了
hdu 1875 Kruskal算法
#include<iostream> #include<string> #include<math.h> #include<algorithm> #define MAXN 101 #define MAXINT 99999999 using namespace std; int n,m,num; double ans; int f[MAXN]; struct edge{ int u,v,w; edge(int x=0,int y=0,int z=0):u(x),v(y),w(z){}; }e[MAXN*MAXN]; struct node{ int x,y; }node1[MAXN]; int find(int x) { if(x==f[x]) return x; f[x]=find(f[x]); return f[x]; } void Union(int x,int y,int z) { int a=find(x); int b=find(y); if(a==b) return ; f[b]=a; ans+=(double)sqrt((double)z); } int distance(int i,int j) { return (node1[i].x-node1[j].x)*(node1[i].x-node1[j].x)+(node1[i].y-node1[j].y)*(node1[i].y-node1[j].y); } bool cmp(edge a,edge b) { return a.w<b.w; } int main() { int cas; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i=1;i<=n;i++) { f[i]=i; scanf("%d %d",&node1[i].x,&node1[i].y); } num=0; for(int i=1;i<=n;i++) for(int j=1;j<i;j++) { int tmp=abs(distance(i,j)); if(tmp>1000000||tmp<100) continue; e[num++]=edge(i,j,tmp); } sort(e,e+num,cmp); ans=0; for(int i=0;i<=num;i++) Union(e[i].u,e[i].v,e[i].w); int cou=0; for(int i=1;i<=n;i++) if(find(i)==i) cou++; if(cou>1) printf("oh!\n"); else printf("%.1f\n",ans*100); } return 0; }
相关文章推荐
- HDU 1162 Eddy's picture(最小生成树-Prim)
- hdu 1162 Eddy's picture
- hdu 1162 Eddy's picture (Kruskal算法,prim算法,最小生成树)
- hdu_1162 Eddy's picture
- hdu-1875-畅通工程再续(克鲁斯卡尔&&普利姆求最小生成树)
- hdu1102 & hdu1162 & hdu1232 & hdu1233
- HDU 1162 Eddy's picture【最小生成树,Prime算法+Kruskal算法】
- HDU 1162 Eddy's picture (最小生成树)
- 畅通工程系列(hdu 1232 && 1233 && 1863 && 1874 && 1875 && 1879)
- hdu 1875 畅通工程再续【prim&kruskal】
- hdu 1162 Eddy's picture<java><prime>
- HDU-#1875 畅通工程再续(Prim & Kruskal+并查集)
- hdu 1162 Eddy's picture (并查集+快排)
- hdu 1162 Eddy's picture(最小生成树之kruskal算法)
- [HDU - 1875 ] 畅通工程再续(最小生成树&&并查集)
- hdu 1162 Eddy's picture(最小生成树)
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- HDU 1162 Eddy's picture (prime算法_裸题)
- HDU-1875 畅通工程再续-1162 - Eddy's picture(最小生成树,Kruskal 算法实现 )
- hdu 1162 Eddy's picture(基础最小生成树)