qq_18717875 2016-08-28 14:35 采纳率: 0%
浏览 1173

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条回答 默认 最新

  • devmiao 2016-08-28 14:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?