24h購物| | PChome| 登入
2009-10-02 22:53:42| 人氣483| 回應0 | 上一篇 | 下一篇

一棵小樹

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 97全國資訊學科能力競賽 3. 找關鍵人物 改編

利用DFS的特性,當退回來的時候紀錄該點下的所有節點數

/***********************************************************/

#include<stdio.h>           
#include<stdlib.h>           
short int map[20001][300]={0},maptop[20001]={0};           
int used[20001]={0},T[20001]={0};     
int n;        
void DFS (int now,int last)           
{           
   int a;     
   for(a=0;a<maptop[now];a++)     
      if(used[map[now][a]]==0)     
         {     
           used[map[now][a]]=1;     
           DFS(map[now][a],now);     
           used[map[now][a]]=0;     
         }     
   T[last]+=T[now];     
}     
 
main()           
{           
   while(scanf("%d",&n)==1)           
       {           
          int a,b,c,x,y;     
          for(a=1;a<=n;a++) {T[a]=1;maptop[a]=0;}     
          for(a=0;a<n-1;a++)           
             {           
                scanf("%d %d",&x,&y);           
                map[x][maptop[x]++]=y;           
                map[y][maptop[y]++]=x;           
             }     
                used[1]=1;DFS(1,0);used[1]=0;    
          for(a=1;a<=n;a++)     
              printf("%5d-%5d\n",a,T[a]);
       }           
   return 0;           
}           
/*       
8       
1 2
1 3
3 4
3 7
3 8
4 6
4 5     
*/       

台長: 來源不明

您可能對以下文章有興趣

人氣(483) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:山六九之旅
此分類上一篇:2.字串處理

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文