首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求POJ1330(Nearest Common Ancestors) 0ms算法,该如何解决

2012-06-02 
求POJ1330(Nearest Common Ancestors) 0ms算法题目地址:http://poj.org/problem?id1330已经优化到16ms,再

求POJ1330(Nearest Common Ancestors) 0ms算法
题目地址:
http://poj.org/problem?id=1330
已经优化到16ms,再也降不下来了,好奇那些0ms的算法难道scanf不用时间吗。。。



[解决办法]

探讨
keeya0416居然不是pmars???上面没人提交通过了啊。。。汗。。。
参考代码:

C/C++ code

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct {
unsigned parent:16;
unsigned set:1;
}Node;

……

[解决办法]
其实,刚才看了以前做过的题,这个也真的随机了,以前0ms的答案,现在交可能16ms了,在一交又0ms了,呵呵!
附代码:
C/C++ code
#include <iostream>using namespace std ;#define N 10001int main(){    int t[N] , test , n , p , c , a , b ;    bool flag[N] ;    scanf("%d",&test) ;    memset(t,0,sizeof(t)) ;    memset(flag,false,sizeof(flag)) ;    while (test--)    {        scanf("%d",&n) ;        for (int i = 1 ; i < n ; ++ i)        {            scanf("%d%d",&p,&c) ;            t[c] = p ;        }        scanf("%d%d",&a,&b) ;        flag[a] = true ;        while (t[a])        {            flag[t[a]] = true ;            a = t[a] ;        }        if (flag[b]) { printf("%d\n",b) ; continue ; }        while (t[b])        {            if (flag[t[b]]) break ;            b = t[b] ;        }        printf("%d\n",t[b]) ;        memset(t,0,sizeof(int)*(n+1)) ;        memset(flag,false,sizeof(bool)*(n+1)) ;    }    return 0 ;} 

热点排行