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 不太理解跟满分答案也没太多区别,为什么这份代码耗时很多,哪里耗费了主要的时间呢?求人解答

http://blog.csdn.net/lishuhuakai/article/details/50347821