ccf网络延迟代码超时,求大神帮忙找一下代码耗时的地方

#include
#include
#include
#include
#include
#include
using namespace std;
#define NEXT_MAX 1550
struct node{
int next_num = 0;
int next[NEXT_MAX] = {0};
int height[2] = {0};//最长的两个深度
};
int n=0,m=0;//n为交换机数,m为主机数
int d=0,ans=0;
node Node[20002];
void dfs(int v)
{

if(v==0) return;
for(int i = 1;i<=Node[v].next_num;i++)
{
    dfs(Node[v].next[i]);   //深度便利 
}
int MAX = 0;
for(int i = 1;i <= Node[v].next_num;i++)
{
    if(Node[Node[v].next[i]].height[0]+1 >= Node[Node[v].next[i]].height[1]+1)
        MAX=Node[Node[v].next[i]].height[0]+1;
    else
        MAX=Node[Node[v].next[i]].height[1]+1;
    int temp;
    if(Node[v].height[0] >= Node[v].height[1])
        temp = Node[v].height[0];
    else
        temp = Node[v].height[1];
    if(MAX >= temp)
    {
        Node[v].height[0] = MAX;
        Node[v].height[1] = temp;       
    }
}
d = Node[v].height[0]+Node[v].height[1];
if(d > ans)
    ans = d;    

}
int main(int argc,char** argv)
{

scanf("%d%d",&n,&m);
for(int i = 2 ; i <= n ; i ++)
{
    int temp;
    scanf("%d",&temp);
    Node[temp].next_num ++; 
    Node[temp].next[Node[temp].next_num] = i ;
}
for(int i = n + 1; i<=m+n;i++)
{
    int temp;
    scanf("%d",&temp);
    Node[temp].next_num ++; 
    Node[temp].next[Node[temp].next_num] = i ;  
}
dfs(1);
printf("%d",ans);

return 0;   

}

代码不长,思路是把深度便利,每一个结点的height数组有两个,一直更新得到最深的两棵树的深度,这样可以求出树的直径,从而解出最远路径,为什么代码错误运行1.032s 不太理解跟满分答案也没太多区别,为什么这份代码耗时很多,哪里耗费了主要的时间呢?求人解答

1个回答

qq_18717875
qq_18717875 回复苏小喵: 我看过这个版本,但是不知道我这样为什么超时那么多,不知道我的代码里面哪里是耗时的地方
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐