YbtOJ#723-欧拉之树【莫比乌斯反演,虚树】

正题

题目链接:http://www.ybtoj.com.cn/contest/121/problem/2


题目大意

给出nnn个点的一棵树,每个点有一个权值aia_iai,求
∑i=1n∑j=1ndis(i,j)×φ(ai×aj)\sum_{i=1}^n\sum_{j=1}^ndis(i,j)\times \varphi(a_i\times a_j)i=1nj=1ndis(i,j)×φ(ai×aj)

2≤n≤2×1052\leq n\leq 2\times 10^52n2×105aaa恰好是一个排列。


解题思路

一个十分显然的结论就是φ(x×y)=φ(x)×φ(y)×gcd(x,y)φ(gcd(x,y))\varphi(x\times y)=\varphi(x)\times \varphi(y)\times \frac{gcd(x,y)}{\varphi(gcd(x,y))}φ(x×y)=φ(x)×φ(y)×φ(gcd(x,y))gcd(x,y)。(相同的质因子只保留一个数p−1p-1p1的就好了)

然后顺便把点编号换一下使得ai=ia_i=iai=i再枚举约数就是
∑d=1nφ(d)d∑i=1n∑j=1ndis(i,j)φ(i)φ(j)×[gcd(i,j)=d]\sum_{d=1}^n\frac{\varphi(d)}{d}\sum_{i=1}^n\sum_{j=1}^{n}dis(i,j) \varphi(i)\varphi(j)\times [gcd(i,j)=d]d=1ndφ(d)i=1nj=1ndis(i,j)φ(i)φ(j)×[gcd(i,j)=d]
然后就可以莫反了,定义
gd=∑d∣in∑d∣jndis(i,j)φ(i)φ(j)g_d=\sum_{d|i}^n\sum_{d|j}^ndis(i,j)\varphi(i)\varphi(j)gd=dindjndis(i,j)φ(i)φ(j)
gd=∑d∣in∑d∣jn(depi+depj−2deplca(i,j))φ(i)φ(j)g_d=\sum_{d|i}^n\sum_{d|j}^n(dep_i+dep_j-2dep_{lca(i,j)})\varphi(i)\varphi(j)gd=dindjn(depi+depj2deplca(i,j))φ(i)φ(j)
gd=2∑d∣indepiφ(i)∑d∣jnφ(j)−2∑k=1n∑i=1n∑j=1n[lca(i,j)=k]depkφ(i)φ(j)g_d=2\sum_{d|i}^ndep_{i}\varphi(i)\sum_{d|j}^n\varphi(j)-2\sum_{k=1}^n\sum_{i=1}^n\sum_{j=1}^n[lca(i,j)=k]dep_{k}\varphi(i)\varphi(j)gd=2dindepiφ(i)djnφ(j)2k=1ni=1nj=1n[lca(i,j)=k]depkφ(i)φ(j)
把所有ddd倍的点加入虚树,然后用树形dpdpdp计算后面那个东西,前面那个可以直接算。

然后答案就是
∑d=1nφ(d)d∑d∣igi\sum_{d=1}^n\frac{\varphi(d)}{d}\sum_{d|i}g_id=1ndφ(d)digi

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n),有点卡常。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#define ll long long
#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
using namespace std;
const int N=4e5+10,T=20,P=1e9+7;
int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
struct node{int to,next;
}a[N<<1];
int n,m,tot,top,dfc,ls[N],rfl[N];
int mu[N],phi[N],pri[N],prn,s[N],p[N];
int stn,lg[N],wz[N],rfn[N],dep[N],f[N][T];
ll S[N],dp[N],g[N],ans;bool v[N],mark[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void prime(){mu[1]=phi[1]=1;for(int i=2;i<=n;i++){if(!v[i])pri[++prn]=i,phi[i]=i-1,mu[i]=-1;for(int j=1;j<=prn&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}phi[i*pri[j]]=phi[i]*(pri[j]-1);mu[i*pri[j]]=-mu[i];}}return;
}
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
bool cmp(int x,int y)
{return rfn[x]<rfn[y];}
void dfs(int x,int fa){dep[x]=dep[fa]+1;rfn[x]=++dfc;f[++stn][0]=x;wz[x]=stn;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;dfs(y,x);f[++stn][0]=x;}return;
}
int LCA(int l,int r){l=wz[l];r=wz[r];if(l>r)swap(l,r);int z=lg[r-l+1],x=f[l][z],y=f[r-(1<<z)+1][z];return dep[x]<dep[y]?x:y;
}
void Ins(int x){if(!top){s[++top]=x;return;}int lca=LCA(x,s[top]);while(top>1&&dep[s[top-1]]>dep[lca])addl(s[top-1],s[top]),top--;if(dep[s[top]]>dep[lca])addl(lca,s[top]),top--;if((!top)||s[top]!=lca)s[++top]=lca;s[++top]=x;return;
}
void calc(int x,ll &ans){if(mark[x])S[x]=phi[x],dp[x]=1ll*phi[x]*phi[x]%P;else S[x]=dp[x]=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;calc(y,ans);(dp[x]+=S[x]*S[y]*2ll%P)%=P;S[x]=(S[x]+S[y])%P;}(ans+=P-1ll*dp[x]*dep[x]%P)%=P;ls[x]=mark[x]=0;return;
}
signed main()
{freopen("sm.in","r",stdin);freopen("sm.out","w",stdout);n=read();prime();for(int i=1;i<=n;i++){int x=read();rfl[i]=x;}for(int i=1;i<n;i++){int x=read(),y=read();x=rfl[x];y=rfl[y];addl(x,y);addl(y,x);}dfs(1,1);for(int j=1;(1<<j)<=stn;j++)for(int i=1;i+(1<<j)-1<=stn;i++){int x=f[i][j-1],y=f[i+(1<<j-1)][j-1];f[i][j]=(dep[x]<dep[y])?x:y;}for(int i=2;i<=stn;i++)lg[i]=lg[i>>1]+1;	memset(ls,0,sizeof(ls));for(int k=1;k<=n;k++){m=top=tot=0;ll sum=0;for(int i=k;i<=n;i+=k)p[++m]=i,sum+=phi[i];sort(p+1,p+1+m,cmp);sum%=P;if(p[1]!=1)s[++top]=1;for(int i=1;i<=m;i++){Ins(p[i]);mark[p[i]]=1;(g[k]+=1ll*phi[p[i]]*dep[p[i]]%P*sum%P)%=P;}while(top>1)addl(s[top-1],s[top]),top--;calc(1,g[k]);g[k]=g[k]*2ll%P;}for(int i=1;i<=n;i++){ll tmp=0;for(int j=i;j<=n;j+=i)(tmp+=mu[j/i]*g[j]%P)%=P;(ans+=tmp*i%P*power(phi[i],P-2)%P)%=P;}printf("%d\n",(ans+P)%P*power(1ll*n*(n-1)%P,P-2)%P);return 0;
}

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

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

相关文章

拼凑 牛客练习赛70

来源&#xff1a;牛客网&#xff1a; 题目描述 牛牛还是很喜欢字符串"puleyaknoi"。 牛牛有T个超长超长的字符串&#xff0c;不过这次他更懒了&#xff0c;他希望直接在字符串中看见他喜欢的字符串。 如果一个子串中含有一个子序列是”puleyaknoi“&#xff0c;那么…

【kruskal】【倍增】严格次小生成树(P4180)

正题 P4180 题目大意 求严格次小生成树 解题思路 一定存在一种严格次小生成树&#xff0c;和最小生成树只差一条边&#xff0c;不然可以用一条最小生成树上的边代替&#xff0c;从而使边权和更小 那么可以先构造出最小生成树&#xff0c;然后枚举每一条不在最小生成树中的边…

ARC107——C - Shuffle Permutation

C - Shuffle Permutation 这几天遇到了很多&#xff08;2道&#xff09;并查集维护连通关系的题。 此题把能够相互交换的行或者列用并查集维护&#xff0c;不难发现一个连通块内的点个数时cntcntcnt连通块内的行或者列可以两两交换&#xff0c;那么对答案的贡献是cnt!cnt!cnt…

CentOS ASP.NET Core Runtime Jexus跨平台布署

.net core 开源和跨平台&#xff0c;能布署到当前主流的Windows&#xff0c;Linux&#xff0c;macOS 系统上。本篇我们将在 Linux 系统上使用 ASP.NET Core Runtime 和 Jexus 布署运行 ASP.NET Core 网站。Linux 系统选的是 CentOS 7.4 64位.NET Core 安装的是 ASP.NET Core Ru…

P1912-[NOI2009]诗人小G【四边形不等式,单调队列】

正题 题目链接:https://www.luogu.com.cn/problem/P1912 题目大意 给出nnn个字符串&#xff0c;把这些字符串依次用空格&#xff08;算一个长度&#xff09;连接分成若干段&#xff0c;若一段长度为xxx&#xff0c;那么代价是∣x−L∣P|x-L|^P∣x−L∣P 求代价和最小的方案&…

疾病预测和天气分析练习赛

肝了半天再加一个晚上。。 之前学了一小段时间的TensorFlow&#xff0c;但是今天练习赛时发现根本没啥用。。。第一阶段早就做完了&#xff0c;今天做的都是第二阶段&#xff0c;都是啥玩意题 又是偏度&#xff0c;又是求系数&#xff0c;又是拟合KNN&#xff0c;真的把人看吐…

Korney Korneevich and XOR(CF750F1/F2)

正题 CF750F1 CF750F2 题目大意 给你一个数列&#xff0c;问有多少个数可以由一个单调递增的子序列异或得到 解题思路 对于F1&#xff0c;可以用p存下得到一个数的最小值&#xff08;即当前子序列前缀的最后一个数&#xff09;&#xff0c;然后直接暴力转移 对于F2&#xf…

《信号与系统》期中总结

某高校的某专业于2020/11/8日进行《信号与系统》期中考试&#xff0c;而某同学这次考试直接爆炸&#xff0c;原因某同学也差不多知道&#xff1a;对待这门学科浅尝辄止&#xff0c;只达到了看着答案&#xff08;看答案看书&#xff09;能够把作业做出来的程度。虽然已经爆炸了&…

YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】

正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/3 题目大意 S(i)S(i)S(i)表示iii的约数个数&#xff0c;QQQ次询问给出n,mn,mn,m求 ∑a1n∑b1mS(a2)S(b2)S(ab)\sum_{a1}^n\sum_{b1}^mS(a^2)\times S(b^2)\times S(a\times b)a1∑n​b1∑m​S(a2)S(b2)S(ab) 1≤Q≤…

微软智能云三驾马车Azure、Office 365、Dynamics 365齐聚中国

Dynamics 365计划于2019年春落地中国&#xff1b;Windows Server 2019、Office 2019正式商用&#xff1b;SQL Server 2019、Azure Sphere 公开预览&#xff1b;Microsoft Azure 更新数十项云服务与功能&#xff0c;聚焦物联网与边缘。2018年10月25日&#xff0c;上海 —— 2018…

H - Holy Grail

H - Holy Grail 题意&#xff1a; 题干又臭又长 我简单说说 n个点&#xff0c;m条有向边&#xff0c;边权为负&#xff0c;然后给你六组起始点&#xff08;s点和t点&#xff09;&#xff0c;你要在s和t之间建一个有向边&#xff0c;要使得权值最小&#xff0c;问这六组边依次…

【LCT】魔法森林(P2387)

正题 P2387 题目大意 给你一个图&#xff0c;每条边有两个全职a,b&#xff0c;现在让你找一条从1到n的路径使得max(a)max(b)最小 解题思路 对a进行排序&#xff0c;枚举a的最大值&#xff0c;然后取b最小的边&#xff0c;找1到n的最短路径 找最短路径可以用LCT求&#xff0…

ASP.NET Core SignalR中的流式传输

什么是流式传输&#xff1f;流式传输是这一种以稳定持续流的形式传输数据的技术。流式传输的使用场景有些场景中&#xff0c;服务器返回的数据量较大&#xff0c;等待时间较长&#xff0c;客户端不得不等待服务器返回所有数据后&#xff0c;再进行相应的操作。这时候使用流式传…

codeforces1435 D. Shurikens

D. Shurikens 自己感觉差不多写了个模拟过了59组数据。 明显这题可能和栈扯上关系&#xff0c;因为很想括号匹配求卡特兰数的形式 看了大佬博客后发现真的和栈有关于是学习了一波。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) …

YbtOJ#662-交通运输【线段树合并,树状数组】

正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出nnn个点的一棵有根树&#xff0c;对于每个xxx求&#xff0c;删除点xxx后修改某个点的父节点&#xff08;修改前该点必须有父节点&#xff09;后最小化最大联通块大小。 解题思路 删掉一个点后肯定…

EOJ Monthly 2020.9 Sponsored by TuSimple E. 加密的情书

E加密的情书 本人太菜&#xff0c;只会签到 题意&#xff1a; 一个多位数可以通过加密变成个位数&#xff0c;加密方式为&#xff1a;各个位数上的数相加&#xff0c;直到加成个位数 例如&#xff1a; 123 --》 1236 现在给出加密后的一串密文 问是否存在连续的自然数数列 l …

【线段树】Frog Traveler(CF751D)

正题 CF751D 题目大意 现在有n个点&#xff0c;当你在i时&#xff0c;可以向前跳 0∼ai0\sim a_i0∼ai​ 步&#xff0c;跳到j&#xff0c;然后向后走bjb_jbj​步&#xff0c;现在让你从n开始跳&#xff0c;回答跳到0的最少步数 解题思路 设fif_ifi​为跳到i的最少步数&…

独立版Jexus配置SSL,支持https访问

一、申请证书【腾讯免费证书】二、验证DNS&#xff0c;即解析域名。记录类型选择 TXT &#xff0c;主机记录与证书上的主机记录保持一致&#xff0c;记录值也与证书上的记录值保持一致三、等待DNS验证与CA轮询&#xff0c;轮询成功后即可下载证书四、Jexus用到的是Nginx中的证书…

codeforces1437 E. Make It Increasing——最长上升子序列

E. Make It Increasing 首先让aiai−ia_ia_i-iai​ai​−i这样可以是严格单增变成单调增。 参考官方题解 首先不难得出如果我们根据不同修改的位置分割成若干段&#xff0c;那么若干段是互不影响的&#xff0c;我们只需要求出每一个若干段修改次数的最小值。 如果当前考虑l~r…

P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P4451 题目大意 给出nnn&#xff0c;对于所有满足∑i1main\sum_{i1}^ma_in∑i1m​ai​n且∀ai∈N\forall a_i\in N^∀ai​∈N的序列求 ∑m1∞∏i1mFbiai\sum_{m1}^{\infty}\prod_{i1}^mFbi_{a_i}m1∑∞​i1∏m​Fbiai​​ 其…