B - Build Roads (最小生成树 + 打表)

news2025/1/8 5:06:26

https://vjudge.net/problem/Gym-103118B/origin

 在猫的国度里,有n个城市。猫国国王想要修n -1条路来连接所有的城市。第i市有一家ai经验价值的建筑公司。要在第i市和第j市之间修建公路,两个城市的建筑公司需要相互合作。但是,在修路的过程中,两家施工公司可能会因为沟通不畅而发生冲突,会造成建筑材料的浪费。从形式上讲,在第i个城市和第j个城市之间修建公路将浪费ged(ai, aj)建筑材料。你能帮助猫国国王选择建造n - 1条连接所有城市的道路,并最大限度地减少建筑材料的浪费吗?为了减少输入大小,猫国的国王给你一个随机整数生成器和3个参数L, R,种子。下面的C语言代码展示了如何生成n个整数a1, a2,…, an, a[i]存储第i个城市建筑公司的经验值。您可以在提交的文件中直接使用代码。

题解:
这道题本身并不是一道难题,

本身就一个最小生成树求出最小距离即可

但是边数n^2,正常求边肯定会t

关键是能否想到n > 某一个之后,答案只会是n - 1

正常来想的话是很难想到这一点的,由于我本身也不太明白,所以无法证明这一点

但是我么可以通过打表发现,当n > 5后,答案就都是n - 1了

(打表是一种很重要的思想,并且这题只用输入四个数即可,是和容易打表的,遇到一些难以解决的问题时,打表不失为一种好的选择)

此外通过他给我们的函数发现

如果R = L那么所有a[i]均为L那么答案就是(n-1)*L 

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
using namespace std;
#define int long long
const int N = 4e6 + 10;
typedef pair<int, int> PII;
unsigned long long seed;
int R,L;
unsigned long long xorshift64()
{
	unsigned long long x=seed;
	x^=x<<13;
	x^=x>>7;
	x^=x<<17;
	return seed=x;
}
int f[N];
int gen(){
	return xorshift64()%(R-L+1)+L;
}
int n;
int a[N];
struct node
{
	int l,r,x;
	friend operator <(const node &a,const node &b)
	{
		return a.x < b.x;
	}
}p[N];
int find(int x)
{
	if(f[x] == x)
	return x;
	return f[x] = find(f[x]);
}
void solve() 
{
	cin >> n >> L >> R >> seed;
	for(int i = 1;i <= n;i++)
	a[i] = gen();
	if( L == R)
	{
		cout <<(n - 1)*L;
		return ;
	}
	if(n > 5)
	{
		cout << n - 1<<"\n";
		return ;
	}
	int cnt = 0;
	for(int i = 1;i <= n;i++)
	{
		for(int j = i + 1;j <= n;j++)
		{
			p[++cnt].l = i;
			p[cnt].r = j;
			p[cnt].x = __gcd(a[i],a[j]);
		}
	}
	for(int i = 1;i <= n;i++)
	{
		f[i] = i;
	}
	sort(p+1,p+1+cnt);
	int ans = 0;
	int w = 0;
	for(int i = 1;i <= cnt;i++)
	{
		int x = find(p[i].l);
		int y = find(p[i].r);
		if(x != y)
		{
			f[y] = x;
			ans += p[i].x;
			w ++;
		}
		if(w == n-1)
		break;
	}
	cout << ans;
}

signed main() 
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
//scanf("%lld",&t);
	while (t--) 
	{
		solve();
	}
}
//3 F
//5 B
//6 F
//9 F
//10 B
//12 F
//15 FB
//18 FB

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

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

相关文章

Windows安装VMware+创建Linux虚拟机

目录1&#xff1a;简介2&#xff1a;功能特点3&#xff1a;VM下载地址4&#xff1a;安装VMware5&#xff1a;下载iso虚拟机镜像6&#xff1a;创建Linux虚拟机7&#xff1a;配置静态ip1&#xff1a;简介 VMware Workstation Pro&#xff08;曾用名VMware Workstation&#xff09…

供应商绩效管理指南:挑战、考核指标与管理工具

管理和优化供应商绩效既关键又具有挑战性。要知道价格并不是一切&#xff0c;如果你的供应商在商定的价格范围内向你开具发票&#xff0c;但服务达不到标准或货物不合格&#xff0c;你也无法达到节约成本的目标。 供应商绩效管理可以深入了解供应商可能带来的风险&#xff0c…

SpringCloud之认识微服务

文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示&#xff1a;以下是本篇文章正文内容&#xff0c;SpringCloud系列学…

Vim笔记

文章目录VIM四种模式命令模式编辑模式末行模式可视化模式扩展内容VIM四种模式 1、命令模式 2、编辑模式 3、末行模式 4、可视化模式 5、VIM四种模式的关系 命令模式 1、命令模式下我们能做什么&#xff1a;① 移动光标 ② 复制 粘贴 ③ 剪切 粘贴 删除 ④ 撤销与恢复 2、进…

【分布式】分布式唯一 ID 的 8 种生成方案

文章目录前言正文什么是分布式ID&#xff1f;分布式ID的特性&#xff1f;分布式ID的生成方案1. UUID2. 数据库自增ID3. 批量生成ID4. Redis生成ID5. Twitter的snowflake算法6. 百度UidGenerator7. 美团Leaf8.滴滴&#xff08;Tinyid&#xff09;小结前言 在互联网的业务系统中…

Leaflet基础入门教程(一)

leaflet是一个前端的轻量的gis框架,为什么说它轻量呢。因为相比于传统的“庞大的”GIS框架比如openlayers和mapbox,leaflet不仅代码体积小,而且API构成也极为简单。是GIS行业小白入门级别学习的最好的框架,没有之一。 那么话不多说我们首先来学习一下如何使用leaflet搭建一…

Vue3中hook的使用及使用中遇到的坑

目录前言一&#xff0c;什么是hook二&#xff0c; hook函数的使用2.1 铺垫2.2 hook函数的写法2.3 使用写好的hook函数后记前言 在学习Es6的时候&#xff0c;我们开始使用类与对象&#xff0c;开始模块化管理&#xff1b;在Vue中我们可以使用mixin进行模块化管理&#xff1b;Vu…

2023-03-03干活小计

今天见识了 归一化的重要性&#xff1a;归一化 不容易爆炸 深度了解了学习率&#xff1a;其实很多操作 最后的结果都是改变了lr 以房价预测为例&#xff1a;一个点一个点更新 比较 矩阵的更新&#xff1a; 为什么小批量梯度下降 优于随机梯度下降 优于批量梯度下降&#xff…

Kubernetes 中 Deployment 使用

Deployment的使用 之前我们了解了Replication Controller和Replica Set两种资源对象&#xff0c;RC和RS的功能基本上是差不多的&#xff0c;唯一的区别就是RS支持集合的selector。也了解到了用RC/RS来控制Pod副本的数量&#xff0c;也实现了滚动升级Pod的功能。现在看上去似乎…

【面试题】前端路由分类

0. 前言 在Web开发中&#xff0c;路由是指根据用户请求的URL地址&#xff0c;确定用户访问的页面资源、参数等&#xff0c;是前端开发中不可缺少的重要部分。Vue router中提供了两种路由模式&#xff0c;一种是hash模式&#xff0c;另一种是history模式。 1. Hash模式路由 H…

爆款升级!新系列南卡Neo最强旗舰杀到,业内首款无线充骨传导耳机!

中国专业骨传导耳机品牌NANK南卡于近日发布了全新南卡Neo骨传导运动耳机&#xff0c;打造一款佩戴最舒适、音质体验最好的骨传导耳机。推出第2代声学響科技技术&#xff0c;提供更优质的开放式骨传导听音体验&#xff0c;透过不一样的音质体验&#xff0c;打造更好的骨传导耳机…

MySQL基础(二)排序与分页、多表查询、单行函数

上接 MySQL基础&#xff08;一&#xff09;SQL分类、导入、SELECT语句&#xff0c;运算符_独憩的博客-CSDN博客 目录 排序与分页 排序 二级排序 分页 多表查询 基础多表查询 等值连接vs非等值连接 自连接vs非自连接 内连接vs外连接 自然连接 单行函数 数值函数 …

信息系统基本知识(四)新技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.5 新一代技术 1.5.1 物联网 概念&#xff1a;&#xff08;The Internet of Things&#xf…

你只会说MVC模型是什么但是不会实现?今天带你走通Web、Servlet、MVC、SpringMVC。代码演示很清晰

文章目录HTTP请求和HTTP响应从0手写一个Web服务器&#xff0c;看看能有多累人使用Servlet实现一个服务器&#xff0c;看看多简单Serlvet的创建Servlet的运行Servlet的其他问题Servlet这么爽&#xff0c;我们简单地探索一下它的原理JSP跟Servlet合作啦&#xff0c;我们来看一下他…

学习ROS时针对gazebo相关的问题(重装与卸载是永远的神)

ResourceNotFound:gazebo_ros 错误解决 参考:https://blog.csdn.net/weixin_42591529/article/details/123869969 当将机器人加载到gazebo时,运行launch文件出现如下错误 这是由于缺少gazebo包所导致的。 解决办法:

Linux 学习 挂载、卸载光盘和实现虚拟机时间同步

/media&#xff1a;挂载光盘使用的 挂载光盘命令&#xff1a;mount /dev/cdrom /media 卸载光盘命令&#xff1a;umount /dev/cdrom 挂载光盘 使用挂在光盘命令挂载光盘&#xff0c;如图所示 卸载光盘 初次卸载光盘可能会出现问题 [rootlocalhost media]# umount /dev/cd…

linux定时任务打包提权docker组提权

定时任务有打包命令&#xff0c;这个命令有参数调用可以执行其他命令&#xff0c;定时任务因为是root用户执行的&#xff0c;所以就会造成提权。一、linux定时任务打包提权复现环境&#xff1a;ubuntun14.041.创建定时任务&#xff1a;在最下面写入&#xff1a;* * * * * …

CK-GW208-EIP与汇川5UPLC走EtherNET_IP通讯指南

CK-GW208-EIP是一款支持标准工业Ethernet/IP协议的IO-LINK主站网关&#xff0c;方便用户快速便捷的集成到PLC等控制系统中。CK-GW208-EIP主站网关集成8路IO-LINK通信端口&#xff0c;采用即插即用模式&#xff0c;无需繁琐的配置&#xff0c;减轻现场安装调试的工作量。为了满足…

几何算法——6.曲线曲面求交的方法总结(国内外文献调研、思考和总结)

几何算法——6.曲线曲面求交的方法总结&#xff08;国内外文献调研、思考和总结&#xff09;1 曲线曲线1.1 直线/二次曲线1.2 二次曲线/二次曲线1.3 其他类型2 曲线曲面2.1 直线/二次曲面&#xff0c;二次曲线/平面2.2 二次曲线/二次曲面2.3 其他类型3 曲面曲面3.1 平面/二次曲…

文件传输协议的五种安全文件传输替代方案

对安全文件传输协议的需求,过去&#xff0c;文件传输协议&#xff08;FTP&#xff09;是发送文件的常用协议。这是一个更简单的时期&#xff0c;安全性比今天要少得多。 但是随着黑客变得越来越复杂&#xff0c;他们发现FTP缺乏安全性。他们知道FTP可以通过有限的方式来确保访…