HDU1875(最小生成树)
畅通工程再续
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21693 Accepted Submission(s): 6856
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
- #include<cstdio>
- #include<cmath>
- #include<vector>
- #include<queue>
- using namespace std;
- const int MAXN=;
- const double INF=1.0e9;
- typedef pair<double,int> P;
- struct Point{
- int x,y;
- }ps[MAXN];
- int V;
- vector<int> G[MAXN];
- double mp[MAXN][MAXN];
- int par[MAXN];
- int rnk[MAXN];
- double dist(int x1,int y1,int x2,int y2)
- {
- return sqrt(double((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
- }
- void prep(int n)
- {
- for(int i=;i<=n;i++)
- {
- par[i]=i;
- rnk[i]=;
- }
- }
- int fnd(int x)
- {
- if(par[x]==x)
- return x;
- return par[x]=fnd(par[x]);
- }
- void unite(int x,int y)
- {
- int a=fnd(x);
- int b=fnd(y);
- if(a==b)
- {
- return ;
- }
- if(rnk[a]<rnk[b])
- {
- par[a]=b;
- }
- else
- {
- par[b]=a;
- if(rnk[a]==rnk[b]) rnk[a]++;
- }
- }
- bool judge(int n)
- {
- int f=fnd();
- for(int i=;i<=n;i++)
- if(f!=par[i]) return false;
- return true;
- }
- double d[MAXN];
- int vis[MAXN];
- double prim(int s)
- {
- double ans=;
- for(int i=;i<=V;i++)
- {
- d[i]=INF;
- vis[i]=;
- }
- d[s]=;
- priority_queue<P,vector<P>,greater<P> > que;
- que.push(P(,s));
- while(!que.empty())
- {
- P now=que.top();que.pop();
- int v=now.second;
- if(vis[v]) continue;
- ans+=now.first;
- vis[v]=;
- for(int i=;i<G[v].size();i++)
- {
- int to=G[v][i];
- if(d[to]>mp[v][to])
- {
- d[to]=mp[v][to];
- que.push(P(d[to],to));
- }
- }
- }
- return ans;
- }
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&V);
- prep(V);
- for(int i=;i<=V;i++)
- for(int j=;j<=V;j++)
- if(i==j) mp[i][j]=;
- else mp[i][j]=INF;
- for(int i=;i<=V;i++)
- {
- scanf("%d%d",&ps[i].x,&ps[i].y);
- }
- for(int i=;i<=V;i++)
- for(int j=i+;j<=V;j++)
- {
- double co=dist(ps[i].x,ps[i].y,ps[j].x,ps[j].y);
- if(co<||co>) continue;
- mp[i][j]=mp[j][i]=co;
- G[i].push_back(j);
- G[j].push_back(i);
- unite(i,j);
- }
- if(judge(V))
- {
- double ans=prim();
- printf("%0.1lf\n",ans*);
- }
- else
- {
- printf("oh!\n");
- }
- }
- return ;
- }
HDU1875(最小生成树)的更多相关文章
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- hdu1875(最小生成树prime)
思路:一开始想用贪心来着,发现贪心有缺陷,然后就用了最小生成树来写,这里用了prime算法,首先,先建个图,两点之间的边的权值就是两个点的距离,然后直接prime模板 代码 #include<i ...
- HDU1875 畅通工程再续【最小生成树】
题意: 在这些小岛中建设最小花费的桥,但是一座桥的距离必须在10 -- 1000之间. 思路: 用最小生成树解决吧,就那两个算法. 代码: prim #include <iostream> ...
- hdu1875 畅通工程再续 并查集/最小生成树
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...
- HDU-1875 畅通工程再续(最小生成树+判断是否存在)
http://acm.hdu.edu.cn/showproblem.php?pid=1875 Problem Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛 ...
- hdu1875 畅通工程再续 最小生成树并查集解决---kruskal
http://acm.hdu.edu.cn/showproblem.php?pid=1875 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- hdu1875 畅通工程再续 暴力+基础最小生成树
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; ; ; ; in ...
- HDU1875+Prim模板
https://cn.vjudge.net/problem/HDU-1875 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府 ...
- 最小生成树(Kruskal算法-边集数组)
以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...
随机推荐
- request 请求转发
package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servl ...
- Spark源码分析之四:Stage提交
各位看官,上一篇<Spark源码分析之Stage划分>详细讲述了Spark中Stage的划分,下面,我们进入第三个阶段--Stage提交. Stage提交阶段的主要目的就一个,就是将每个S ...
- Android 音频 OpenSL ES 录音 采集
1,; int channelConfig = AudioFormat.CHANNEL_OUT_STEREO; int audioFormat = AudioFormat.ENCODING_PCM_1 ...
- 【转】一步一步带你反编译apk,并教你修改smali和重新打包
一.工具介绍: 1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包: 2.dex2jar:该工具作用是将cl ...
- CentOS6.5升级内核从2.6.32到3.2.14
由于最近想要在服务器上跑IOU,但是在部署VMware后发现不能正常启动,总是提示内核无法载入,什么C header files matching your running kernel were n ...
- Nested Classes
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html package priceton; /* * Copyright (c) ...
- 使用cocos2d-js-3.0RC1中的物理引擎chipmunk模拟的“别碰钉子”源码分享(含碰撞检测)
分别用box2d和chipmunk实现了一下,不过box2d没整理,也懒得整理了.chipmunk整理了一下,分享给大家吧. 刚开始研究,抛砖引玉 简要说明:1.初始化物理环境,增加边界 initPh ...
- iOS 10 权限配置大全
<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...
- HDU 5247 找连续数 (set妙用)
找连续数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 使用appium和testng实现Android自动截图
简单介绍 需求场景是:当测试安卓应用的脚本得到失败结果时,对当前手机屏幕截图,便于查找问题. 实现方式是:1)定义一个父类UITest,作为所有测试类的父类.在父类中UITest中定义一个截图的方法, ...