http://acm.hust.edu.cn/thx/problem.php?id=1422
STL+DFS
#include<iostream><br />#include<cstdio><br />#include<string.h><br />#include<vector><br />#include<map><br />#include<cmath><br />#include<stack><br />#include<queue><br />#include<algorithm><br />using namespace std;<br />#define inf 0x7fffffff<br />vector<int> v[50005];<br />int a[50005];<br />int dfs(int x)<br />{<br /> int i,j;<br /> a[x]+=v[x].size();<br /> for(i=0;i<v[x].size();i++)<br /> {<br /> j=v[x][i];<br /> a[x]+=dfs(j);<br /> }<br /> return a[x];<br />}</p><p>int main()<br />{<br /> //freopen("a.txt","r",stdin);<br /> int t;<br /> scanf("%d",&t);<br /> for(int ca=1;ca<=t;ca++)<br /> {<br /> int n,m;<br /> scanf("%d",&n);<br /> int i,j,k;<br /> //memset(a,0,sizeof(a));<br /> for(i=0;i<=n;i++)<br /> v[i].clear(),a[i]=0;<br /> for(i=1;i<n;i++)<br /> {<br /> int num;<br /> scanf("%d",&num);<br /> v[num-1].push_back(i);<br /> }<br /> dfs(0);<br /> printf("Case #%d: ",ca);<br /> printf("%d",a[0]);<br /> for(i=1;i<n;i++)<br /> printf(" %d",a[i]);<br /> printf("/n");<br /> }<br /> return 0;<br />}