CDOJ 1146 A - 秋实大哥与连锁快餐店 最小生成树 Prim算法 稠密图
2024-09-05 10:29:30
Time Limit:3000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu
Appoint description:
System Crawler (2016-05-01)
System Crawler (2016-05-01)
Description
成大事者,不惟有超世之才,亦有坚忍不拔之志。
秋实大哥开了一家快餐店之后,由于人赢光环的影响,很快就赚得了大量的资金。为了继续实现心中的远大的理想,他打算在全国各地开设分店赚大钱。假设现在有n家快餐店(其中有至少有一家是旗舰店)分布在二维平面上,第i家快餐店的坐标为(xi, yi)。为了方便交通,他打算在一些快餐店之间修建道路使得任意一家快餐店都能够通过道路到达某一家旗舰店。
但是秋实大哥忙于赚钱和过节,没有时间来设计道路,你能帮助秋实大哥算出最少一共需要修建多长的道路吗?
Input
第一行一个整数n,表示快餐店的个数。(n≤6666)
接下来n行,每行两个整数xi,yi,zi(−1000000≤xi,yi≤1000000)。表示第i家快餐店的位置(xi,yi),如果zi=0表示该店是普通的分店,如果 zi=1表示该店是旗舰店。
保证至少有一家旗舰店
Output
输出最少一共需要修建的道路长度,保留小数点后两位。
Sample Input
3
1 -1 0
1 1 0
0 0 1
Sample Output
2.83
Hint
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const ll inf = 1e15;
const double pi=acos(-1); const int max_v=6666;
int x[max_v],y[max_v],flag[max_v];
double mincost[max_v];
bool used[max_v]; double dist(int i,int j)
{
if(flag[i]&&flag[j]) return 0;
else return sqrt(pow((x[i]-x[j]),2)+pow((y[i]-y[j]),2));
}//用pow(,2)比两个相乘快多了,两个直接相乘都超时了 int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
mincost[i]=inf;
used[i]=false;
scanf("%d %d %d",&x[i],&y[i],&flag[i]);
} double ans=0;
mincost[1]=0;
while(1)
{
int u=-1;
for(int v=1;v<=n;v++)
if(!used[v]&&(u==-1||mincost[v]<mincost[u]))
u=v;//找到离当前集合最近的点
if(u==-1) break;
used[u]=true;//加入当前集合
ans+=mincost[u];
for(int i=1;i<=n;i++)
if(!used[i])//优化,在还未加入集合的点中找
mincost[i]=min(dist(u,i),mincost[i]);
}
printf("%.2f\n",ans);
}
return 0;
}
分析:很好的一道题;
1.旗舰店之间都连接一条权值为0的边,问题转化为求最小生成树;
2.因为是稠密图,开不了那么大的数组,kruskal就用不了了,只有用Prim算法了;
3.这道题超时卡的很严重,防止超时看代码;
最新文章
- MAC下Homebrew的安装
- 72. 求m到n之和
- replaceCharactersInRange
- spring使用jackson返回object报错:Handler execution resulted in exception: Could not find acceptable representation
- 通过cagradientLayer类封装uiimageview动画色度差
- 224. Basic Calculator
- java新手笔记32 jdk5新特性
- (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间
- MYSQL 错误 :Out of resources when opening file &#39;./datagather/mx_domain#P#p178.MYD&#39; (Errcode: 24) 解决办法
- JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系
- ububtu 彻底卸载程序的几种方法
- NET Framework 4.5 五个新特性
- 多线程编程中使用pthread_create内存泄露问题
- 【简单并查集】Farm Irrigation
- poj 2299 Ultra-QuickSort 逆序对模版题
- Java并发编程:Callable、Future和FutureTask的实现
- Javascript闭包与作用域this
- 【学习】js学习笔记---字符串对象
- iOS开发讲解SDWebImage,你真的会用吗?
- 前端工程师必须要知道的HTTP部分
热门文章
- /etc/sysctl.conf 控制内核相关配置文件
- Java设计给小学生的自动出题系统
- python之网络部分
- 事件循环(EventLoop)的学习总结
- IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(Application.StartupPath + ";\\temp";, 0); 报:异常来自 HRESULT:0x80040228
- 09.AutoMapper 之自定义类型转换器(Custom Type Converters)
- icmp, IPPROTO_ICMP - Linux IPv4 ICMP 核心模块.
- initdb - 创建一个新的 PostgreSQL数据库集群
- zabbix 内存溢出
- 登陆Oracle的管理员登陆