首页 > 其他分享 >友好国度

友好国度

时间:2023-05-27 16:56:09浏览次数:30  
标签:int siz 路径 值为 国度 倍数 友好

A开始与其他国家交流。

国家之间的交通关系可以抽象为一棵由 n 个节点组成的树,那么显然一个国家到另一个国家只存在唯一的简单道路。与此同时,每个国家还有一个友好度 ai,两个国家能够成为友好国度,当且仅当这两个国家的简单路径上所有点的友好度的最大公因数为 1。

A当然知道他与多少个国家是友好国度,不过现在A想问你,所有的国家一共有多少对是友好国度?


 看似点分治,实则并查集。不过淀粉质可以做(

 先把点权转化成边权,也就是把边权弄成起点和终点的gcd,然后计算值为i的倍数的路径数,用并查集维护,再然后计算值为i的路径数,最后输出值为1的倍数。每次枚举权值为i的倍数的边,然后在并查集里把边的起点和终点连起来,新增的值为i的倍数的路径数也就是起点所在的连通块的大小乘上终点所在的连通块的大小。

最后从大到小枚举,类似数学归纳法。刚刚枚举到i时,小于等于i的这一块还是值为i的倍数的路径数,大于i的这一块就是值为i的倍数的路径数。那么在处理i时,就可以把原来求出的值为i的倍数的路径数减去值为2i的路径数再减去值为3i的路径数等。最后剩下来的就是值为i的路径数。

时间复杂度 O(NlogN)(没算并查集的复杂度,而通过容斥推得不算并查集时间复杂度O(128N)是错的,这个log是调和级数来的)

#include<bits/stdc++.h>
#define fi    first
#define se    second
#define rev(x)    f[x]=x,siz[x]=1
using namespace std;
typedef long long ll;
const int N=1e5;
vector<pair<int,int> > t,tmp[N+9];
int n,a[N+9],f[N+9],siz[N+9];
ll res,ans[N+9];
int kf(int x)
{
    return f[x]==x?x:(f[x]=kf(f[x]));
}
void merge(int x,int y)
{
    x=kf(x);
    y=kf(y);
    res+=siz[x]*siz[y];
    f[x]=y;
    siz[y]+=siz[x];
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1,x,y;i<n;i++)
    {
        cin>>x>>y;
        t.push_back({x,y});
    }
    for(int i=1;i<=n;i++)    cin>>a[i];
    for(auto v:t)    tmp[__gcd(a[v.fi],a[v.se])].push_back(v);
    for(int i=1;i<=n;i++)    rev(i);
    for(int i=1;i<=N;i++)
    {
        res=0;
        for(int j=i;j<=N;j+=i)
            for(auto v:tmp[j])    merge(v.fi,v.se);
        ans[i]=res;
        for(int j=i;j<=N;j+=i)
            for(auto v:tmp[j])
            {
                rev(v.fi);
                rev(v.se);
            }
    }
    for(int i=N>>1;i;i--)
        for(int j=i<<1;j<=N;j+=i)    ans[i]-=ans[j];
    cout<<ans[1];
    return 0;
}

标签:int,siz,路径,值为,国度,倍数,友好
From: https://www.cnblogs.com/eggome/p/17436909.html

相关文章

  • 这段代码会抛出NPE,你造吗?----封装AssertUtil来友好地利用断言
    运行下面代码,会抛出NPE。你知道为什么吗?importcn.hutool.core.lang.Assert;publicclassTestMain{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();Assert.isTrue(myClass.myProperty==0);}privatestati......
  • 对kotlin友好的现代 JSON 库 moshi 基本使用和实战
    对kotlin友好的现代JSON库moshi基本使用和实战blog.csdn.net成就一亿技术人!前言上一篇博客我们聊了下gson在处理kotlindataclass时的一些坑,感兴趣的可以了解一下:gson反序列化成dataclass时的坑总结一下有一下两点属性声明时值不能为null,结果反序列化后值为null,跟预......
  • “天翼云出海友好客户启航会”圆满收官!
    3月28日,“天翼全球云启未来”——天翼云出海友好客户启航会在香港成功举办。中国电信国际公司总经理尹进、副总经理李康和副总经理吴晓雷,大湾区国际信息科技协会会长杨德斌,香港中国企业协会副总裁曾燊典,天翼云科技有限公司助理总经理江峰出席活动,与来自金融、OTT、连锁零售等各行......
  • VisionMobile:2013年Q3移动开发者经济报告(四):第三章、移动开发者国度:2013年Q3的青睐度
    第三章、移动开发者国度:2013年Q3的青睐度(心理份额)平台的土地争夺是否已经结束?自2013年Q1以来,Android和iOS保持其移动开发者青睐度。最新的对6000+移动开发者研究表明,Android有71%的开发者使用,排在首位,其后是56%的iOS。HTML5确立了作为移动开发技术选择的地位,有52%的开发者使用HTML5......
  • CISP-PTE靶场通关思路分享-文件包含篇(十分友好,无比详细)
    PTE靶场包含5道Web题之文件包含靶场,此靶场为模拟靶场文件包含从首页中我们知道了需要读取根目录下的key.php文件,尝试获取WebShell   不获取Shell,直接读取key.php文件内容:使用伪协议php://filter可以达到的目的;使用data伪协议使用伪协议data://可以达到注入木......
  • P2782 友好城市题解
    题目传送门题意:给定一些上下的线段,求出最多不相交的线段数量。一开始看错题了,以为是给定一堆线段,求出线段最大不交数量,然后就写了一个树状数组优化\(dp\)结果样例都不过,......
  • Solon v2.2.1 发布。向 Graalvm Native 友好靠近
    本次更新最重要的是增加了SolonAPT项目,为更简单的完成GraalvmNative打包提供了帮助;其次是增加了@ProxyComponent和@SolonMain注解;以及优化了SolonBean的生命......
  • 一个网站有多个域名,怎么处理对SEO比较友好?
    哪些情况下,会出现一个网站多个域名?1、购买了核心域名(如:seowhy.com),同时把小众后缀域名一起买了(如:seowhy.org),网站建立后,希望把小众后缀的域名一起解析到网站上。2、发现正使......
  • 社畜友好工具
    windows下定时屏保提醒1.使用windows批处理命令https://www.likecs.com/show-494405.html缺点:直接弹出屏保,过于突兀优点:不用另外下载工具2. FadeTop缺点:需要下载软......
  • 简单友好的 Python 任务调度库
    schedule:https://github.com/dbader/schedule该项目人性化的API设计,让开发者仅用几行代码就能轻松实现定时任务。它不依赖任何第三方库,全部代码也就一个文件800多......