CF1245D Shichikuji and Power Grid 题解

news2025/1/22 12:21:31

CF1245D Shichikuji and Power Grid 题解

  • 题目
    • 链接
    • 字面描述
      • 题面翻译
      • 样例 #1
        • 样例输入 #1
        • 样例输出 #1
      • 样例 #2
        • 样例输入 #2
        • 样例输出 #2
      • 提示
  • 思路点拨
  • 代码实现

题目

链接

https://www.luogu.com.cn/problem/CF1245D

字面描述

题面翻译

已知一个平面上有 n n n 个城市,需要个 n n n 个城市均通上电

一个城市有电,必须在这个城市有发电站或者和一个有电的城市用电缆相连

在一个城市建造发电站的代价是 c [ i ] c[i] c[i]

i i i j j j 两个城市相连的代价是 k [ i ] + k [ j ] k[i]+k[j] k[i]+k[j] 乘上两者的曼哈顿距离

求最小代价的方案

输入:

第一行为城市个数

下面是每个城市的坐标 x [ i ] 和 y [ i ] x[i]和y[i] x[i]y[i]

下面是建造发电站的代价 c [ i ] c[i] c[i]

下面是每个城市连线的系数 k [ i ] k[i] k[i]

输出:

一个为最小代价

建造发电站的城市数,和每个城市

连线的条数,和每条连线

任意一种即可,输出顺序任意

样例 #1

样例输入 #1

3
2 3
1 1
3 2
3 2 3
3 2 3

样例输出 #1

8
3
1 2 3 
0

样例 #2

样例输入 #2

3
2 1
1 2
3 3
23 2 23
3 2 3

样例输出 #2

27
1
2 
2
1 2
2 3

提示

For the answers given in the samples, refer to the following diagrams (cities with power stations are colored green, other cities are colored blue, and wires are colored red):

For the first example, the cost of building power stations in all cities is 3 + 2 + 3 = 8 3 + 2 + 3 = 8 3+2+3=8 . It can be shown that no configuration costs less than 8 yen.

For the second example, the cost of building a power station in City 2 is 2. The cost of connecting City 1 and City 2 is 2 ⋅ ( 3 + 2 ) = 10 2 \cdot (3 + 2) = 10 2(3+2)=10 . The cost of connecting City 2 and City 3 is 3 ⋅ ( 2 + 3 ) = 15 3 \cdot (2 + 3) = 15 3(2+3)=15 . Thus the total cost is 2 + 10 + 15 = 27 2 + 10 + 15 = 27 2+10+15=27 . It can be shown that no configuration costs less than 27 yen.

思路点拨

求全图连接的最小距离,无意(可能也是友善的出题人有意)的透漏了本题是一道最小生成树。
但无非的差别是,图内必须有一点连接核电站,这个处理起来十分简单,只需要建一个虚拟原点0号节点 0 号节点到 i 号节点的有向边的权值为 c i 0号节点到i号节点的有向边的权值为c_i 0号节点到i号节点的有向边的权值为ci
之后在把其他 ∀ i 与 ∀ j ( 1 ≤ i ≤ n ) ( 1 ≤ j ≤ n ) ( i = /   j ) , 一一建边权为 ( ∣ x i − x j ∣ + ∣ y i − y j ∣ ) ⋅ ( k i + k j ) 的有向边 \forall i与\forall j (1 \leq i \leq n) (1 \leq j \leq n)(i{=}\mathllap{/\,}j),一一建边权为(|x_i-x_j|+|y_i-y_j|)\cdot(k_i+k_j)的有向边 ij(1in)(1jn)(i=/j),一一建边权为(xixj+yiyj)(ki+kj)的有向边
切记记得开 l o n g long long l o n g long long(不同意的自己去算范围
时间复杂度: O ( n 2 ⋅ l o g 2 ( n 2 ) ) ≈ 2 e 7 \Omicron (n^2\cdot log2(n^2))\approx 2e7 O(n2log2(n2))2e7
AC
分析结束!

代码实现

//收获虚拟原点 
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=2e3+10;
int n,cnt,ans=0,tot1,tot2,n1; 
int c[maxn],k[maxn],fa[maxn];
bool use[maxn];
struct node{
	int x,y;
	inline void input(){
		scanf("%d%d",&x,&y);
	}
}a[maxn];
struct vertex{
	int x,y,w;
	bool vis;
}e[maxn*maxn];
inline int distance(int x1,int y1,int x2,int y2){return abs(x1-x2)+abs(y1-y2);}
inline bool cmp(vertex nx,vertex ny){return nx.w<ny.w;}
inline int find(int nx){
	if(nx==fa[nx])return nx;
	return fa[nx]=find(fa[nx]);
}
inline bool merge(int nx,int ny){
	int p=find(fa[nx]);
	int q=find(fa[ny]);
	if(p==q)return false;
	fa[p]=q;
	return true;
}
inline void Kruskal(){
	sort(e+1,e+cnt+1,cmp);
	for(int i=1;i<=cnt;i++){
		if(merge(e[i].x,e[i].y)){
			ans+=e[i].w;
			if(e[i].x==0){
				++tot1;
				use[e[i].y]=true;
			}
			else {
				e[i].vis=true; 
				++tot2;	
			}
			n--;
			if(n==1)return;
		}
	}
}
inline void Print(){
	printf("%lld\n",ans);
	printf("%lld\n",tot1);
	for(int i=1;i<=n1;i++){
		if(use[i])printf("%lld ",i);
	}
	printf("\n");
	printf("%lld\n",tot2);
	for(int i=1;i<=cnt;i++){
		if(e[i].vis)printf("%lld %lld\n",e[i].x,e[i].y);
	}
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)a[i].input();
	for(int i=1;i<=n;i++){
		scanf("%lld",&c[i]);
		e[++cnt].x=0;
		e[cnt].y=i;
		e[cnt].w=c[i]; 
	}
	for(int i=1;i<=n;i++)scanf("%lld",&k[i]);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j)continue;
			e[++cnt].x=i;
			e[cnt].y=j;
			int dis=distance(a[i].x,a[i].y,a[j].x,a[j].y);
			e[cnt].w=(k[i]+k[j])*dis;
		}
	}
	for(int i=0;i<=n;i++)fa[i]=i;
	++n;
	n1=n-1;
	Kruskal();
	Print();
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计网笔记 数据链路层 (1-2) 封装成帧、差错控制、流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)

文章目录 前言在这里插入图片描述 零、数据链路层基本概念一、功能0、数据链路层功能概述1、封装成帧和透明传输1.1封装成帧1.2 透明传输1.3组帧方法 2、数据链路层的差错控制2.0差错从何而来2.1位错&#xff08;比特错&#xff0c;1变成0&#xff0c;0变成1&#xff09;2.2帧错…

干货 | ChatGPT使用指南,让你轻松上车AI世界!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 聊天机器人&#xff08;Chatbot&#xff09;是一种人工智能应用&#xff0c;可以模拟人类对话行为&#xff0c;以自然语言进行交互。 在过去的几年里&#xff0c;随着自然语言处理技术和深…

Springboot +Flowable,定时器的简单使用

一.流程定义定时激活 之前介绍流程定义的时候&#xff0c;流程都是定义好之后立马就激活了&#xff0c;其实在流程定义的这个过程中&#xff0c;我们还可以设置一个激活时间&#xff0c;也就是流程定义好之后&#xff0c;并不会立马激活&#xff08;不激活就不能据此流程定义创…

操作系统作业 第37-40章

第四次作业 第37章 本章作业需要使用提供的disk.py程序。该程序可以模拟磁盘的工作。在默认情况下&#xff0c;磁盘调度方法为FIFO。对于时间的计算&#xff0c;假设旋转一度为1个时间单位&#xff0c;旋转完整一圈需要360个时间单位&#xff0c;而一个磁道上默认有12个扇区&…

实验二 RDD基础编程

实验二 RDD基础编程 前提是配置好大数据环节。 hadoop&#xff0c;spark&#xff0c;scala等必须的软件 以及下载pyshark 1.实验目的 1. 掌握 RDD 基本操作&#xff1b; 2. 熟悉使用 RDD 编程解决实际具体问题的方法&#xff1b; 2.实验内容 本人仅提供测试代码&#xff01;…

策划专业技能提升攻略,让你在职场中脱颖而出

作为一个10多年的老策划&#xff0c;刚入行的时候也走过很多弯路&#xff0c;后来加入到一家在国内比较知名的策划公司&#xff08;老板也是当年的十大知名策划人&#xff09;才真正让我实现水平的跃升。 当时公司经常有内训&#xff0c;新人的第一课就是策划人应该如何快速入…

FreeRTOS-事件组详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转FreeRTOS &#x1f4ac;保持…

深入理解JVM读书笔记与实战_01_Java内存区域与内存溢出异常

文章目录 运行时数据区域问题引入 运行时数据区域 Java虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区。运行时数据区包括了程序计数器、虚拟机栈、本地方法栈、方法区和堆。 程序计数器&#xff1a;程序计数器是线程私有的内存&#xff0c;用来记住…

vue:组件使用v-model实现2个组件间的数据双向绑定

一、需要实现的需求&#xff1a; 子组件输入框的数据发生改变&#xff0c;父组件的数据跟着实时改变&#xff1b; 父组件的数据发生改变&#xff0c;子组件的数据跟着实时改变。 二、实现思路&#xff1a; 1、&#xff08;1&#xff09;在父组件引入子组件。&#xff08;2&…

CAN总线要点总结(CAN2.0A/B)

个人博客原文链接&#xff1a;CAN总线要点总结&#xff08;CAN2.0A/B&#xff09; 前言 工作也有几年了&#xff0c;在项目中也接触过几次CAN总线&#xff0c;但总是止步于会用即可&#xff0c;对于很多细节上的东西有时还是稀里糊涂的状态&#xff0c;这几天正好有点时间&am…

【亲测有效】pycharm不显示软件包

http://pypi.hustunique.com/ https://pypi.mirrors.ustc.edu.cn/ http://pypi.tuna.tsinghua.edu.cn/simple/ http://mirrors.aliyun.com/pypi/simple/ http://pypi.douban.com/simple/2023.5.13 亲测有效

单点登录系统:登录,登出,拦截器

什么是单点登录&#xff1f; 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 假设一个企业…

贪心算法(无规则)

目录 1.easy1.455. 分发饼干2.1005. K 次取反后最大化的数组和3.860. 柠檬水找零 2.medium1.序列问题1.376. 摆动序列2.738. 单调递增的数字 2.贪心解决股票问题1.122. 买卖股票的最佳时机 II 3.两个维度权衡问题1.135. 分发糖果*2.406. 根据身高重建队列(linklist&#xff0c;…

【WOA-LSTM】基于WOA优化 LSTM神经网络预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Neuron 2.4.0 发布:体验下一代工业物联网连接和管理

近日&#xff0c;EMQ 旗下的工业协议网关软件 Neuron 发布了最新的 2.4.0 版本。 该版本新增了包括 ABB COMLI 在内的四个南向驱动和一个北向应用&#xff0c;同时对现有的插件功能和 UI 进行了优化。 快速体验 Neuron 新版本 新增驱动插件满足不同场景需求 IEC61850 MMS 和 …

springboot项目如何优雅停机

文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机 前言 相信很多同学都会用Kill -9 PID来杀死进程&#xff0c;如果用在我们微服务项目里面&#xff0c;突然杀死进程会有什么…

计算机组成原理基础练习题第二章

1.下面四种语言中&#xff0c;()更适应网络环境 A、FORTRAN    B、JavaC、C        D、PASCAL 2.下列叙述中正确的是&#xff08;&#xff09; A.终端是计算机硬件的一部分,好比电视中的小屏幕 B. ALU是代数逻辑单元的缩写 C.导航用计算机属于一般用途计算…

网络数据链路层介绍

文章目录 一、以太网二、以太网的帧格式三、局域网通信的原理四、ARP协议1.ARP协议的介绍2.ARP协议的工作流程3.ARP数据报格式 一、以太网 以太网并不是一种具体的网络&#xff0c;而是一种技术标准&#xff0c;它既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内…

【数据分享】2023年全国A级景区数据(14847个景区)

我国的旅游景区&#xff0c;依据景区质量划分为五级&#xff0c;从高到低依次为5A、4A、3A、2A、A级旅游景区。我国旅游管理部门对于A级景区实行“有进有出”的动态管理&#xff0c;也就是A级景区的名单每年都在变&#xff01;我们立方数据学社也一直在跟踪整理每年的A级景区数…

Android面试指南:说说你对组件化/模块化的理解

到现在组件化真的不是什么新鲜东西了&#xff0c;大公司都用的滚瓜烂熟&#xff0c;龙飞凤舞了&#xff0c;也就是现在部分中型项目和小项目在组件化的路上努力。所以同志们&#xff0c;组件化没玩过的&#xff0c;不熟悉的赶紧搞起来&#xff0c;说一点&#xff0c;你不会组件…