HDU 5326
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 int vis[200]; 7 struct Point 8 { 9 int sum; 10 int last; 11 }s[200]; 12 13 int main() 14 { 15 int n,m; 16 while(~scanf("%d %d",&n,&m)) 17 { 18 if(n==1&&m==0)//注意特判!!! 19 { 20 printf("1\n"); 21 continue; 22 } 23 for(int i=0;i<=104;i++) 24 s[i].sum=0,s[i].last=0,vis[i]=0; 25 int x,y; 26 if(m>=n) 27 { 28 printf("0\n"); 29 continue; 30 } 31 for(int i=0;i<n-1;i++) 32 { 33 scanf("%d %d",&x,&y); 34 s[y].last=x; 35 int ss=y; 36 if(!vis[y]) 37 { 38 while(1) 39 { 40 if(s[ss].last!=0) 41 { 42 s[s[ss].last].sum++; 43 ss=s[ss].last; 44 } 45 else 46 break; 47 } 48 } 49 else 50 { 51 int d=s[ss].sum+1; 52 while(1) 53 { 54 if(s[ss].last!=0) 55 { 56 s[s[ss].last].sum+=d; 57 ss=s[ss].last; 58 } 59 else 60 break; 61 } 62 } 63 ss=s[ss].last; 64 while(1) 65 { 66 if(s[ss].last!=0) 67 { 68 s[s[ss].last].sum++; 69 ss=s[ss].last; 70 } 71 else 72 break; 73 } 74 vis[x]=vis[y]=1; 75 } 76 // printf("%d\n",s[1].sum); 77 int ans=0; 78 for(int i=1;i<=100;i++) 79 if(m==s[i].sum&&vis[i]) 80 ans++; 81 printf("%d\n",ans); 82 } 83 } 84