日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CF990G-GCD Counting【dfs】

發(fā)布時(shí)間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF990G-GCD Counting【dfs】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/CF990G


題目大意

給出一棵有點(diǎn)權(quán)的樹(shù),對(duì)于每個(gè)kkk求有多條路徑的點(diǎn)權(quán)gcdgcdgcdkkk

1≤n≤2×105,1≤ai≤2×1051\leq n\leq 2\times 10^5,1\leq a_i\leq 2\times 10^51n2×105,1ai?2×105


解題思路

開(kāi)始以為要莫反,后來(lái)發(fā)現(xiàn)不用。

首先gcdgcdgcd之間拆倍數(shù),設(shè)fif_ifi?表示點(diǎn)權(quán)都是iii的倍數(shù)的路徑條數(shù),這個(gè)用一個(gè)vectorvectorvector存然后暴力枚舉iii加點(diǎn)每次dfsdfsdfs出每個(gè)聯(lián)通塊的大小就好了。

之后倒序枚舉iii,再枚舉它的倍數(shù)ikikik,然后fi?=fikf_i-=f_{ik}fi??=fik?,這樣就自動(dòng)容斥,用不上莫比烏斯反演了。

時(shí)間復(fù)雜度O(∑i=1nσ0(ai)+nlog?n)O(\sum_{i=1}^n\sigma_0(a_i)+n\log n)O(i=1n?σ0?(ai?)+nlogn)


code

#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ll long long using namespace std; const ll N=2e5+10; ll n,w[N],v[N],f[N]; vector<ll> p[N],G[N]; //void Prime(){ // mu[1]=1; // for(ll i=2;i<N;i++){ // if(!v[i])v[i]=1,pri[++cnt]=i,mu[i]=-1; // for(ll j=1;j<=cnt&&i*pri[j]<N;j++){ // v[i*pri[j]]=1; // if(i%pri[j]==0)break; // mu[i*pri[j]]=-mu[i]; // } // } // return; //} ll Add(ll x,ll fa,ll k){v[x]=k;ll siz=0;for(ll i=0;i<G[x].size();i++){ll y=G[x][i];if(y==fa||w[y]%k)continue;siz+=Add(y,x,k);}return siz+1; } signed main() {scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld",&w[i]);p[w[i]].push_back(i);}for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);G[x].push_back(y);G[y].push_back(x);}for(ll i=1;i<=2e5;i++)for(ll j=i;j<=2e5;j+=i)for(ll k=0;k<p[j].size();k++){ll x=p[j][k];if(v[x]==i)continue;ll siz=Add(x,x,i);f[i]+=siz*(siz+1)/2;}for(ll i=2e5;i>=1;i--)for(ll j=2*i;j<=2e5;j+=i)f[i]-=f[j];for(ll i=1;i<=2e5;i++)if(f[i])printf("%lld %lld\n",i,f[i]);return 0; }

總結(jié)

以上是生活随笔為你收集整理的CF990G-GCD Counting【dfs】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。