hdu 1875 最小生成树 prime版
最小生成树prime版
大致的步骤
首先选取一个到集合最近的点 然后标记起在集合内部 然后更新最短距离
畅通工程再续
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 24846 Accepted Submission(s): 8035
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
2
10 10
20 20
3
1 1
2 2
1000 1000
oh!
#include<cstdio>
#include<iostream>
#include<string.h>
#include<cmath>
#define maxn 105
#define inf 9999999
struct node
{
double x,y;
}stu[maxn];
int vis[maxn],n;//用来表示点是否在集合里
double mincost[maxn];//用来记录从集合出来到每个点的最小距离
double mapp[maxn][maxn];
using namespace std;
double get_len(node a,node b)
{
return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
}
void build_map()
{
for(int i=;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
double len=get_len(stu[i],stu[j]);
if(len>=&&len<=)
mapp[i][j]=mapp[j][i]=(i==j)?:len;
else mapp[i][j]=mapp[j][i]=inf;
}
}
}
void init()
{
memset(vis,,sizeof(vis));
}
double minn(double x,double y)
{
if(x-y>) return y;
else return x;
}
double prim()
{
fill(mincost,mincost+n+,inf);
mincost[]=;
double res=;
while()
{
int v=-;
for(int i=;i<=n;i++) if(!vis[i]&&(v==-||mincost[i]<mincost[v])) v=i;//找出离集合最近的点
if(v==-) break;
vis[v]=;
res+=mincost[v];
for(int i=;i<=n;i++) mincost[i]=minn(mincost[i],mapp[v][i]);//更新最小距离
}
return res;
}
int main()
{
cin.sync_with_stdio(false);
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lf %lf",&stu[i].x,&stu[i].y);
build_map();
double temp=prim()*100.0;
if(temp>inf) printf("oh!\n");
else printf("%.1f\n",temp);
}
return;
}
#include<cstdio>#include<iostream>#include<string.h>#include<cmath>#define maxn 105#define inf 9999999struct node{ double x,y;}stu[maxn];int vis[maxn],n;//用来表示点是否在集合里 double mincost[maxn];//用来记录从集合出来到每个点的最小距离 double mapp[maxn][maxn];using namespace std;double get_len(node a,node b){return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));}void build_map(){for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){double len=get_len(stu[i],stu[j]);if(len>=10&&len<=1000)mapp[i][j]=mapp[j][i]=(i==j)?0:len;else mapp[i][j]=mapp[j][i]=inf;}}}void init(){memset(vis,0,sizeof(vis));}double minn(double x,double y){if(x-y>0) return y;else return x;}double prim(){fill(mincost,mincost+n+1,inf);mincost[1]=0;double res=0; while(1) { int v=-1; for(int i=1;i<=n;i++)if(!vis[i]&&(v==-1||mincost[i]<mincost[v])) v=i;//找出离集合最近的点 if(v==-1) break; vis[v]=1;res+=mincost[v];for(int i=1;i<=n;i++) mincost[i]=minn(mincost[i],mapp[v][i]); } return res;}int main(){cin.sync_with_stdio(false);int t; scanf("%d",&t);while(t--) { init(); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf %lf",&stu[i].x,&stu[i].y); build_map(); double temp=prim()*100.0; if(temp>inf) printf("oh!\n"); else printf("%.1f\n",temp); }return 0;}
hdu 1875 最小生成树 prime版的更多相关文章
- HDU 1875 最小生成树prim算法
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #inc ...
- HDU 1875(最小生成树)
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> ...
- HDU 1875 畅通工程再续 (prim最小生成树)
B - 畅通工程再续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- HDU 1875 畅通工程再续 (Prim)
题目链接:HDU 1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现 ...
- 最小生成树 prime poj1258
题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...
- 最小生成树 prime + 队列优化
存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...
- hdu 1875 畅通project再续
链接:hdu 1875 输入n个岛的坐标,已知修桥100元/米,若能n个岛连通.输出最小费用,否则输出"oh!" 限制条件:2个小岛之间的距离不能小于10米,也不能大于1000米 ...
- HDU 1233(最小生成树)
HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...
- hdu 1875 畅通工程再续(prim方法求得最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1875 /************************************************* ...
随机推荐
- python 将数据写入excel
摘要链接: python第三方库——xlrd和xlwt操作Excel文件学习 :http://blog.csdn.net/wangkai_123456/article/details/50457284 ...
- Cookie的使用(js-cookie插件)
js-cookie 官方文档 里面就详细的介绍了es5怎么引用,以下是ES6以上的用户 一.安装 npm install js-cookie --save 二.引用 import Cookies fr ...
- springboot之docker化
1.Docker安装 本人是centos7系统,安装也是按照官方文档进行安装.https://docs.docker.com/install/linux/docker-ce/centos/ ,即 1. ...
- osg 加载 fbx文件
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osg/Group> #include <os ...
- 22Flutter中的常见的按钮组件 以及自定义按钮组件
/* Flutter中的常见的按钮组件 以及自定义按钮组件 一.Flutter中的按钮组件介绍 Flutter里有很多的Button组件,常见的按钮组件有:RaisedButton/FlatButto ...
- Qt编写自定义控件58-直方对称图
一.前言 本控件也非原创控件,是参考网上的代码而来的,对称顾名思义就是将画布平均成上下两部分,将设置的值自动按照画布高度的一半作为参照高度进行绘制,然后增加动态过渡效果,有点类似于声音播放时候的频谱效 ...
- web框架之MVC/MTV
MVC框架 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式 Model(模型)表示应用程序核心(比如数据库记录列表) Vi ...
- charles 偏好设置
本文参考:charles 偏好设置 charles 偏好设置 偏好设置,注意作用如下 用户界面 视图 启动设置 警告设置 视图选项 头和主体一起查看 请求和响应页查看 结构试图布局 序列试图布局 显 ...
- Unity接入九游SDK学习与踩坑
学习之路漫漫,应修之期远兮.持之以恒,方得始终. 这几日接入九游SDK,于浑浑噩噩中成长. 下面是步骤: 一:下载九游SDK 二:打开Android Studio新建一个工程,并且新建一个Androi ...
- MySQL“Another MySQL daemon already running with the same unix socket”的处理
方法一: rm var/lib/mysql/mysql.sock service mysqld start 方法二: mv /var/lib/mysql/mysql.sock /var/lib/mys ...