3
2025-08-16 15:15:33
发布于:浙江
11阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int sum[50002];
int h[50002];
int idx = 0;
int e[50002],ne[50002];
bool st[50002];
void add(int a,int b){
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
int ans=0;
int dfs(int u){
int d1=0,d2=0;
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
int 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(){
int n;
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] = true;
}
}
for(int i=1;i<=n;i++){
if(!st[i]){
dfs(i);
}
}
cout << ans;
return 0;
}
这里空空如也
有帮助,赞一个