首页 > 其他分享 >[ABC210E] Ring MST

[ABC210E] Ring MST

时间:2024-07-08 12:55:35浏览次数:13  
标签:le gcd ai MST tree ABC210E int ans Ring

题目传送门

题目传送门(洛谷)
题目传送门(atcoder)

Step 1 理解题意

  • 给定一张 n n n 个点的图,最开始时图中一条边都没有;
  • 给出两个长度为 m m m 的数组 a , b a,b a,b
  • 你可以按照以下操作加边:选择一个 i i i ( 1 ≤ i ≤ m 1 \le i \le m 1≤i≤m)和一个 x x x ( 0 ≤ x ≤ n 0 \le x \le n 0≤x≤n),并在顶点 x x x 和顶点 ( x + a i )   m o d   n (x + a_i) \bmod n (x+ai​)modn中添加一条长度为 b i b_i bi​ 的边。
  • 求添加的边的总和最小值使得图能联通如果无论如何都不能使整个图连通,输出 − 1 -1 −1。

Step 2 做法简介

对这道题的情况,我们可以进行分类讨论:

  1. 当 m = 1 m = 1 m=1 此时当且仅当 g c d ( a 1 , n ) = 1 gcd(a_1,n) = 1 gcd(a1​,n)=1 是存在连通图,否则输出 − 1 -1 −1这是当m = 1且gcd(a_1,n) != 1 的情况

2.当 m > 1 m > 1 m>1 时,同理,应当使 g c d ( a 1 , a 2 , . . . , a m , n ) = 1 gcd(a_1,a_2,...,a_m,n) = 1 gcd(a1​,a2​,...,am​,n)=1时才存在连通图,其他情况均为无解。
对于有解的情况,对于任意一个 a i a_i ai​ ,我们可以将剩下的 k k k 合并为 g c d ( a i , k ) gcd(a_i,k) gcd(ai​,k)个点,且代价为 g c d ( a i , n ) × b i gcd(a_i,n) \times b_i gcd(ai​,n)×bi​
所以,我们就可以用贪心解决这道题
首先先将 a , b a,b a,b 的结构体按照 b b b 的大小进行排序
然后从 1 1 1 到 m m m 选取 a i a_i ai​ 并将 n n n 赋值为 n ← g c d ( a i , n ) n \gets gcd(a_i,n) n←gcd(ai​,n) , a n s ← a n s + ( n − g c d ( a i , n ) × b i ) ans \gets ans + (n - gcd(a_i,n) \times b_i) ans←ans+(n−gcd(ai​,n)×bi​)
直到 n = 1 n = 1 n=1 时退出循环,并输出答案 a n s ans ans。

step 3 Ac code

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,m;
int ans = 0;

struct node{
	int a,b;
}tree[100005];

int cmp(node x, node y){
	return x.b < y.b;
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i = 1;i <= m; i++)
		scanf("%lld%lld",&tree[i].a,&tree[i].b);
	sort(tree+1, tree + 1 + m ,cmp);
	for(int i = 1; i <= m ;i++){
		ans += (n - __gcd(n, tree[i].a))  * tree[i].b;//代价
		n = __gcd(n,tree[i].a);
		if(n == 1) break;
	}
	if(n > 1) printf("-1");//无解
	else printf("%lld",ans);
	return 0;
}

标签:le,gcd,ai,MST,tree,ABC210E,int,ans,Ring
From: https://blog.csdn.net/dengqingrui123/article/details/140259682

相关文章

  • 使用Spring Cloud构建微服务架构下的淘客返利系统
    使用SpringCloud构建微服务架构下的淘客返利系统大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在当今互联网时代,微服务架构已成为构建大型复杂应用的主流方式之一。本文将深入探讨如何利用SpringCloud构建一个高可用、高性能的淘客返利系统,通过......
  • Spring Boot Redis 集群性能优化(基于 Redisson)
    1.SpringBootRedis集群性能优化(基于Redisson)1.1.版本说明1.2.为什么是Redisson1.3.参数优化1.3.1.Redisson配置参数1.3.1.1.通用参数1.3.1.2.集群参数1.3.1.3.最终参数配置1.4.从Nacos获取Redisson配置1.SpringBootRedis集群性能优化(......
  • java-spring boot光速入门教程(超详细!!)
    目录一、引言1.1初始化配置1.2整合第三方框架1.3后期维护1.4部署工程1.5敏捷式开发二、SpringBoot介绍springboot2.1搭建一个springboot工程2.2使用idea创建项目2.3在线创建姿势2.4项目的目录结构2.5项目的运行方式2.6yml文件格式2.7多环境配置2......
  • springboot在线智能助考系统-计算机毕业设计源码00068
    摘要随着人工智能技术的快速发展,智能辅助学习系统在教育领域日益受到重视。本研究旨在基于GPT构建在线智能助考系统,结合先进的自然语言处理技术,为用户提供智能问答、模拟考试、资源分享、交流论坛等功能,旨在提升用户学习效率和体验。GPT模型作为一种自然语言生成模型,具有......
  • springboot事故车辆与违章车辆跟踪系统-计算机毕业设计源码03863
    摘  要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设事......
  • springboot个人健康信息管理小程序-计算机毕业设计源码07695
    摘要在当今这个数字化、信息化的时代,个人健康管理已成为人们生活中不可或缺的一部分。随着生活节奏的加快,越来越多的人开始关注自己的身体状况,希望能够及时了解并调整自己的生活习惯,以达到最佳的健康状态。为此,我们开发了一款基于SpringBoot的个人健康信息管理小程序,旨在......
  • SpringBoot使用线程池实现异步批量处理任务
    模拟批处理大量数据@Slf4j@ComponentpublicclassTestFutureService{@AutowiredprivateTestFutureServiceImpltestFutureServiceImpl;/***多线程的优势:多核CPU使用多线程可以提高CPU的利用率(单核CPU不行,反而降低),可以实现异步调用。**......
  • SpringBoot集成Mongodb文档数据库
    添加Maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置Mongodb连接信息spring:data:mongodb:host:10.30.29.246......
  • [ABC210E] Ring MST 题解
    链接洛谷相应链接atcoder相应链接题意给n(1≤n≤......
  • 课程设计-基于Springboot+Vue的网上商城购物系统的设计与实现(源码+LW+包运行)
    源码获取地址:https://download.csdn.net/download/u011832806/89426605系统演示视频:链接:https://pan.baidu.com/s/1p9Xv9VrlNXSyNXRkdhccPg?pwd=xfdy一.系统概述网上商城购物系统主要是为了提高工作人员的工作效率和更方便快捷的满足用户,更好存储所有数据信息及快速方......