题目传送门

政府审批的规则如下:

(1)如果两个或以上城市申请修建同一条公路,则让它们共同修建;

(2)如果三个或以上的城市申请修建的公路成环。如下图,A申请修建公路AB,B申请修建公路BC,C申请修建公路CA。则政府将否决其中最短的一条公路的修建申请;

(3)其他情况的申请一律同意。

题目说了一大堆,看起来就是在求最小生成树的。但是规则2有点难受,但是我们仔细想一想这个规则其实是没用的==。

看到一个dalao是这样写的

因为A申请修建公路AB,所以AB<=AC,B申请修建公路BC,所以BC<=AB,C申请修建公路CA,所以AC<=BC,而这三个条件同时成立当且仅当AB=BC=AC,既然这样,去掉那条边都是一样的,这与求解最小生成树不冲突。

所以题目就是裸的最小生成树了,但是这道题给的是各点坐标,点数又是5000级别,那么边数就是n²的水平,因为我原来只会Kruskal(太菜了),而Kruskal是基于边的算法,复杂度O(mlogm),所以会超时==。于是现补了一下Prim算法,它是基于点的算法,复杂度O(n²),所以在这道题中就比较合适。

而且如果用Kruskal的话,肯定要处理出所以边权的,而显然这样会MLE,所以这题就是Prim专属咯。

口胡一下Prim算法:

@ 算法思想:逐步扩展
> 使用类似与 Dijkstra 算法的思想,逐步确定在生成树中的点;
> 随便找一个起点,一开始只有起点是确定在生成树中的;
> 在起点的邻居中找一个边权最短的,这条边就确定在生成树中了;
> 再从没有确定的点中找一个距离确定的点中边权最小的,重复这个
过程直到所有点被确定。
@ 这个算法与 Dijkstra 的不同之处在于,找最小的时候,不再与起
点的距离,而是和所有的确定点中的最小距离。

(yl老师的课件)

所以prim算法还是要学一学的啊==

Code

 #include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream> using namespace std;
const int inf=0x7ffffff; int n,pos;
bool vis[];
double ans,dis[];
int x[],y[]; double math_dis(int a,int b)
{
return sqrt((double)(x[a]-x[b])*(x[a]-x[b])+(double)(y[a]-y[b])*(y[a]-y[b]));
} void Prim()
{
for(int i=;i<=n;i++)
{
double sta=1e8;
for(int j=;j<=n;j++)
if(!vis[j]&&dis[j]<sta)
{
sta=dis[j];pos=j;
}
ans+=sta;
vis[pos]=;
for(int j=;j<=n;j++)
{
double tmp=math_dis(pos,j);
// cout<<tmp<<endl;
if(tmp<dis[j]) dis[j]=tmp;
}
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
dis[i]=1e8;
}
dis[]=;
Prim();
printf("%.2lf",ans);
return ;
}

Luogu P1265修复公路【Prim最小生成树】By cellur925的更多相关文章

  1. Luogu 1111 修复公路(最小生成树)

    Luogu 1111 修复公路(最小生成树) Description A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数N,和公路数M,公路是双向的 ...

  2. 【Luogu P1265】公路修建

    Luogu P1265 本来一开始我用的Kruskal--但是由于double类型8字节,所以MLE了. 很容易发现这是一道最小生成树的题目. 值得注意的是题目中给的第二个限制,只存在唯一情况即这个环 ...

  3. 洛谷 P1111 修复公路(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1111 这道题的关键是读懂题: 首先根据题中的一些扎眼的字眼我们可以判断这是一道用最小生成树来做的题 ...

  4. P1111 修复公路 (prim)

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  5. [LUOGU] P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  6. 最小生成树 kruskal算法 codevs 1638 修复公路

    1638 修复公路  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description A地区在地震过后,连接所有村庄的公 ...

  7. P1111 修复公路

    P1111 修复公路 550通过 1.6K提交 题目提供者该用户不存在 标签并查集 难度普及/提高- 提交该题 讨论 题解 记录   题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通 ...

  8. [LuoguP1111]修复公路

    [LuoguP1111]修复公路 题目描述: A地区在地震过后,链接所有村庄的公路都损坏了,而导致无法通车,政府派人修复这些公路. 给出A地区的N村庄数和M公路数,并且对于每一个公路给出其链接的两个村 ...

  9. Prim 最小生成树算法

    Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...

随机推荐

  1. Spring官方文档翻译——15.1 介绍Spring Web MVC框架

    Part V. The Web 文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层) Spring拥有自己的web框架--Spring Web MVC.在前两章中会有介绍. ...

  2. C++类中使用new及delete小例子(续)

    在该示例中我们显式定义了复制构造函数来代替默认复制构造函数, 在该复制构造函数的函数体内, 不是再直接将源对象所申请空间的地址赋值给被初始化的对象, 而是自己独立申请一处内存后再将源对象的属性复制过来 ...

  3. 设计模式学习笔记——Decorator装饰模式

    装饰模式的作用或动机就是,尽量避免继承,而使用关联.原因是层层继承下来,内容会越来越多,有失控的危险.就扩展性而言,用关联比用继承好.所谓的关联,A使用了B,就叫A关联了B. Component 抽象 ...

  4. 解决pyspark-linux-windowsIDE JAVA_HOME not set

    对 os.environ 赋值 ssh://root@192.168.2.51:22/usr/bin/python -u /home/data/tmp_test/trunk/personas/tmp_ ...

  5. 20170223-问题001,增强中的E消息 显示为 S模式消息,

     MM01 的屏幕增强,里面写的      MESSAGE e056(z1) WITH '供应链计划(SCP) 储备物料与当期物料不能同时选择.'.可是现实出来是S 消息模式,这是为什么?系统转换了吗 ...

  6. C++的学习 (此博客将一直补充更新下去,C++语法方面的内容不开新随笔了, *【语法学习】)

    // #include <sstream> // stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,包含在上述头文件中 // 先谈它在字符串处理方面的应用 ...

  7. HDU3667 Transportation —— 最小费用流(费用与流量平方成正比)

    题目链接:https://vjudge.net/problem/HDU-3667 Transportation Time Limit: 2000/1000 MS (Java/Others)    Me ...

  8. CentOS7 安装和配置 mysql5.7

    1.下载 mysql源安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2.安装mysql源 ...

  9. Python作业之购物商城

    作业:购物商场 1.商品展示,价格 2.银行卡余额 3.付账 程序流程图如下: 代码如下: ShopDisplay = {'} print(ShopDisplay) ShoppingCartPrice ...

  10. html5--6-16 CSS3中的文字与字体

    html5--6-16 CSS3中的文字与字体 中文字体包很大,少量字体的话可以有其它方法. 有字库-首页-全球第一中文web font(在线字体)服务平台.web font.webfont.在线字体 ...