链式前向星
2025-11-24 17:14:24
发布于:浙江
1阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
long long sum[50002],n,h[50002],idx,e[50002],ne[50002],ans;
bool st[50002];
void add(long long a,long long b){
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
long long dfs(long long u){
long long d1=0,d2=0;
for(int i=h[u];i!=-1;i=ne[i]){
long long j=e[i],d=dfs(j)+1;
if(d>=d1)d2=d1,d1=d;
else if(d>d2)d2=d;
}
ans=max(ans,d1+d2);
return d1;
}
int main(){
cin>>n;
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++)for(int j=2;j<=n/i;j++)sum[i*j]+=i;
for(int i=2;i<=n;i++){
if(sum[i]<i){
add(sum[i],i);
st[i]=1;
}
}
for(int i=1;i<=n;i++)if(!st[i])dfs(i);
cout<<ans;
return 0;
}
这里空空如也






有帮助,赞一个