posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          LCA 最近公共祖先問題 (2)

          Posted on 2007-07-14 13:24 ZelluX 閱讀(478) 評論(0)  編輯  收藏 所屬分類: Algorithm
          PKU1330,普通樹的LCA問題。把結(jié)點A的所有父結(jié)點都保存在一個hash數(shù)組中,然后從結(jié)點B開始向上搜索,直到發(fā)現(xiàn)hash數(shù)組中存在的元素為止。
          #include <stdio.h>
          #include 
          <stdlib.h>

          typedef 
          struct TreeNode *pTree;

          struct TreeNode
          {
              
          int value;
              pTree father;
          };

          main()
          {
              
          int cases, n, i;
              scanf(
          "%d"&cases);
              pTree nodes[
          10000];
              
          for (i = 0; i < 10000; i++)
              {
                  nodes[i] 
          = malloc(sizeof(struct TreeNode));
                  nodes[i]
          ->value = i;
              }
              
          int flag[10000];
              
          while (cases > 0)
              {
                  cases 
          --;
                  scanf(
          "%d"&n);
                  
          for (i = 0; i < n; i++)
                  {
                      nodes[i]
          ->father = NULL;
                  }
                  
          int x, y;
                  
          for (i = 0; i < n - 1; i++)
                  {
                      scanf(
          "%d %d"&x, &y);
                      nodes[y 
          - 1]->father = nodes[x - 1];
                  }
                  scanf(
          "%d %d"&x, &y);
                  
          for (i = 0; i < n - 1; i++)
                      flag[i] 
          = 0;
                  pTree p 
          = nodes[x - 1];
                  
          while (p != NULL)
                  {
                      flag[p
          ->value] = 1;
                      p 
          = p->father;
                  }
                  p 
          = nodes[y - 1];
                  
          while (p != NULL)
                  {
                      
          if (flag[p->value])
                      {
                          printf(
          "%d\n", p->value + 1);
                          
          break;
                      }
                      p 
          = p->father;
                  }
              }
              
          return 0;
          }


          主站蜘蛛池模板: 岳普湖县| 上思县| 永修县| 湘阴县| 潜山县| 庆城县| 蕲春县| 五家渠市| 房山区| 芜湖市| 泊头市| 鹤庆县| 博乐市| 梁河县| 启东市| 师宗县| 福建省| 涿州市| 福泉市| 泗阳县| 紫阳县| 卢氏县| 宣武区| 莒南县| 沁水县| 梁平县| 嘉义市| 盖州市| 鹿邑县| 梅州市| 那坡县| 东乡族自治县| 夏河县| 阿巴嘎旗| 绍兴县| 邵武市| 绥滨县| 苏尼特右旗| 青田县| 珲春市| 西林县|