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

[ABC210E] Ring MST 题解

时间:2024-07-08 09:59:13浏览次数:21  
标签:node gcd int 题解 MST leq ai ans Ring

链接

洛谷相应链接

atcoder 相应链接

题意

给 n ( 1 ≤ n ≤ 1 0 9 ) n(1 \leq n \leq 10^9) n(1≤n≤109) 个点的图,并给长度为 m ( 1 ≤ m ≤ 1 0 5 ) m(1 \leq m \leq 10^5) m(1≤m≤105) 的两个数组 a , b ( 1 ≤ a i ≤ n − 1 , 1 ≤ b i ≤ 1 0 9 ) a,b(1 \leq a_i \leq n - 1,1 \leq b_i \leq 10^9) a,b(1≤ai​≤n−1,1≤bi​≤109)。

每次可选择在点 x ( 1 ≤ x ≤ n ) x(1\leq x\leq n) x(1≤x≤n) 和 ( x + a i ) m o d    n (x + a_i)\mod n (x+ai​)modn 中添加一个长度为 b i b_i bi​ 的边,问添加的边的长度总和至少为多少,才能使得整个图连通,不连通输出 -1

思路

考虑 m = 1 m = 1 m=1 时,如果要建成联通图,必须要让 gcd ⁡ ( n , a 1 ) = 1 \gcd(n,a_1) = 1 gcd(n,a1​)=1,否则会发生如下情况:
在这里插入图片描述
如果 m > 1 m > 1 m>1 则同理可得当 gcd ⁡ ( n , a 1 , a 2 ⋯ a m ) = 1 \gcd(n,a_1,a_2\cdots a_m) = 1 gcd(n,a1​,a2​⋯am​)=1 时有解。这样我们已经解决了判断无解的情况。

对于任意一个 i i i,可知最多可将剩下的 p p p 个点合并成剩下 gcd ⁡ ( p , a i ) \gcd(p,a_i) gcd(p,ai​) 个点,我们先按照 b i b_i bi​ 大小排序,对于每一次操作连通块的数量都由 p ← gcd ⁡ ( p , a i ) p \gets \gcd(p,a_i) p←gcd(p,ai​),则 a n s ← a n s + ( p − gcd ⁡ ( p , a i ) ) × b i ans \gets ans + (p - \gcd(p,a_i)) \times b_i ans←ans+(p−gcd(p,ai​))×bi​。若有解,最后输出 a n s ans ans 即可。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int gcd(int x,int y) {
	return y?gcd(y,x % y):x;
}
struct edge{
	int a,b;
	friend bool operator <(edge x,edge y) {
		return x.b < y.b;
	}
}node[200005];
int ans = 0;
signed main() {
	cin >> n >> m;
	for(int i = 1;i <= m;i++) cin >> node[i].a >> node[i].b;
	sort(node + 1,node + m + 1);
	for(int i = 1;i <= m;i++) {
		ans += (n - gcd(n,node[i].a)) * node[i].b;
		n = gcd(n,node[i].a);
		if(n <= 1) {
			cout<<ans<<endl;
			return 0;
		}
	}
	cout<<"-1"<<endl;
	return 0;
}

标签:node,gcd,int,题解,MST,leq,ai,ans,Ring
From: https://blog.csdn.net/guozhetao/article/details/140259434

相关文章

  • 课程设计-基于Springboot+Vue的网上商城购物系统的设计与实现(源码+LW+包运行)
    源码获取地址:https://download.csdn.net/download/u011832806/89426605系统演示视频:链接:https://pan.baidu.com/s/1p9Xv9VrlNXSyNXRkdhccPg?pwd=xfdy一.系统概述网上商城购物系统主要是为了提高工作人员的工作效率和更方便快捷的满足用户,更好存储所有数据信息及快速方......
  • Spring Boot3整合Mybatis Plus,数据库为MySQL
    项目结构如下:注意不需要任何XML文件1.导入依赖除了SpringBoot创建时自带的依赖,还需要加入:<!--MybatisPlus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version&g......
  • SpringBoot整合Radis(redis启用,maven依赖,及具体实用)
    文章目录1、本地下载redis并且开启2、导入maven依赖3、添加application.properties4、创建配置类RedisConfig.java5、使用1、注解1、@Cacheable(value="",key="")2、**@CachePut**(value="",key="")3、CacheEvict(value="",key="")2、示例1、本地下......
  • R语言数据格式转换:字符串(Strings)转为日期类型(Dates)
     R语言数据格式转换:字符串(Strings)转为日期类型(Dates)目录 R语言数据格式转换:字符串(Strings)转为日期类型(Dates)as.Date函数单个字符串到日期类型字符串向量到日期类型向量dataframe一列从字符串到日期类型dataframe多列从字符串到日期类型 as.Date函数通常,当您......
  • CodeForces CF1986C Update Queries题解
    来吧,兄弟们,再来篇题解,其实也不是题解,是我自己的思路/心得/体会UpdateQueries题面翻译题目翻译一共$t$组数据,每组数据给定长度为$n$的字符串$s$,长度为$m$的$ind$数组和字符串$c$。你可以任意安排$ind$数组和字符串$c$的顺序,并按照此顺序对字符串$s$进行$m$......
  • **CodeForces CF1928B Equalize题解**
    ok兄弟们,今天本蒟蒻来做一篇小小的题解Equalize题面翻译有一个给定的长度为$n$的数列$a$,现在加上一个排列$b$,即$c_i=a_i+b_i$。现在求对于所有可能的$b$,$c$中出现最多的数的出现次数的最大值。translateby@UniGravity.题目描述Vasyahastwohobbies—addingpe......
  • 基于springboot + vue3 +遗传算法的智能组卷在线考试系统的设计与开发
    目录一、项目介绍1、项目简介 二、项目实现1、数据库设计E-R图2、数据库级联思路3、SpringSecurity的认证思路......
  • SpringBoot项目开发中公共字段的处理
    序言在SpringBoot项目开发中,会存在许多重复的公共字段,例如:字段名create_time创建时间update_time更新时间create_user创建操作人update_user更新操作人对于以上四个字段,需要大量的重复代码来实现,比较繁琐......
  • Spring源码(一) 如何阅读 Spring 源码
    学习Spring的源码,也可以通过SpringBoot搭环境。不管是什么源码,最好写个demo,跑起来,然后从常用的类和方法入手,跟踪调试。配置对象新建一个SpringBoot的项目,详情见:https://blog.csdn.net/sinat_32502451/article/details/133039001接着在com.example.demo.model......
  • 【Java】详解String类中的各种方法
    创建字符串常见的创建字符串的三种方式://方式一Stringstr="helloworld";//方式二Stringstr2=newString("helloworld");//方式三char[]array={'a','b','c'};Stringstr3=newString(array);"hello"这样的字符串字面值......