首页 > 其他分享 >luogu P8207 题解

luogu P8207 题解

时间:2023-01-19 09:44:21浏览次数:53  
标签:node gcd int 题解 long luogu P8207

在暴力建边的情况下可以 kruskal 求生成树。

但是这样是 \(O(n^2)\) 的。

因为 \(lcm(x,y) = x \times y / \gcd(x,y)\)。

所以 \(\gcd(x,y)\) 越大我们的答案越优。

但是枚举 \(x\) 和 \(y\) 求 \(\gcd(x,y)\) 也是会超时的。

但是我们用 正难则反 的思想,对于每一个 \(i \in[L,R]\) 枚举倍数。

而 \(i\) 是这些数的最大公因数的因数。

而这样做是 \(\sum_{i=1}^{i=n} n/i = \log n\) 的。

因此总复杂度是 \(O(n \log^2 n)\) 的。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn =4e6+100;
int tot;
struct node{
    int u,v,w;
}edge[maxn];
bool cmp(node a,node b){
    return a.w<b.w;
}
int fa[maxn];
int found(int u){
    if(fa[u]==u){
        return u;
    }
    else{
        return fa[u]=found(fa[u]);
    }
}
int res=0;   hg
signed main(){
    int l,r;
    cin>>l>>r;
    for(int i=l;i<=r;i++) fa[i]=i;
    for(int i=1;i<=r;i++){
        int v=ceil(l*1.0/i)*i;
        for(int j=ceil(l*1.0/i)*i;j<=r;j+=i){
            if(v!=j){
                edge[++tot].u=v;
                edge[tot].v=j;
                edge[tot].w=v*j/__gcd(v,j);
            }
        }
    }
    sort(edge+1,edge+tot+1,cmp);
    for(int i=1;i<=tot;i++){
        int u=edge[i].u;
        int v=edge[i].v;
        int w=edge[i].w;
        if(found(u)!=found(v)){
            //cout<<u<<' '<<v<<' '<<w<<'\n';
            fa[found(u)]=found(v);
            res+=w;
        }
    }
    cout<<res;
}

标签:node,gcd,int,题解,long,luogu,P8207
From: https://www.cnblogs.com/chifan-duck/p/17061078.html

相关文章

  • CF1768C 题解
    考虑构造。首先第一轮构造我们把第一次出现的数放到\(p\)里面,第二次出现的放到\(q\)里面。如果有数第三次出现呢?那么显然无解。那么现在\(p\)和\(q\)中都填了一......
  • 【luogu AGC031E】Snuke the Phantom Thief(网络流)
    SnukethePhantomThief题目链接:luoguAGC031E题目大意有n个特殊点分布在二维平面上,每个点有坐标和价值。你要选一些点,总价值是你选的点的价值和。然后有一些约束,......
  • 题解 P2480 [SDOI2010]古代猪文
    题意求\[g^{\sum\limits_{d|n}C_n^d}\bmod999911659\]\(n,g\le10^9\)一道非常好的数论题,用到了基本所有的基础数论知识。需要使用到的数论知识欧拉定理......
  • DBeaver展示大数据表卡死问题解决
    现象:当打开大表,比如大小达到几百M,并且获取所有行时,程序会卡死,无响应,只能强制关闭原因:DBeaver是基于java开发的,非常容易的可以想到是JVM内存设置过小导致溢出解......
  • ABC285GH题解
    ABC285GH题解G可以把\(2\)的覆盖视作一对匹配,显然在网格图上是二分图。那么对于\(?\)的处理,是可以匹配也可以不匹配,\(2\)是必须匹配。所以做上下界网络流即可,复杂......
  • 题解目录
    数据结构与算法这是我的一些算法题解与算法思考。按板块不断更新,希望对你有帮助。题目来自各大主流平台,有leetcode,有洛谷,有Acwing等。现在主力更新动态规划基础系列中,适......
  • P4012 题解
    前言题目传送门!更好的阅读体验?网络流\(24\)题:最大费用最大流。思路首先我们只看每一个点。是典型的方格取数问题,可以考虑费用流。对于一个相邻的、可以走到的点\(......
  • P3549 [POI2013]MUL-Multidrink 题解--zhengjun
    其他题解都是大码量的直接构造,来一发dp的题解。思路很明确,直接dp,然后输出路径即可。考虑先把\(1\ton\)的路径找出来,记为\(a_i(1\lei\lem)\)。那么肯定存在一种......
  • 【题解】P4482 [BJWC2018]Border 的四种求法
    思路SAM+树剖。好仙的题啊,做了一天。令\(\operatorname{lcs}(i,j)\)表示长度为\(i,j\)的前缀的最长公共后缀长度,则题目中的border可以等价转化成:求最大且满足......
  • Atcoder ABC 285 题解
    E-WorkorRest题意​ 一周有\(n\)天,给出一个长度为\(n\)的数组\(A\)。你可以决定一周中的休息日与工作日的分布,请问如何选择能够使总贡献最大。​ 如何计算贡献......