NC232359. 生活在树上
描述
输入描述
第一行一个表示树的节点数量。
接下来行,第
行两个数
和
,分别表示这个点的父亲和它到父亲的距离。
,
。
输出描述
行,第
行表示从
节点出发能到达多少不同的节点。
示例1
输入:
5 1 2 1 1 2 1 3 3
输出:
3 3 2 2 1
C++ 解法, 执行用时: 281ms, 内存消耗: 23800K, 提交时间: 2022-03-26 11:26:36
#include <bits/stdc++.h> using namespace std; int f[1000010],w[1000010],d1[1000010],d2[1000010]; int main(){ int n,i; scanf("%d",&n); for(i=2;i<=n;i++){ scanf("%d%d",&f[i],&w[i]); if(w[i]<=1) d1[i]++,d1[f[i]]++; } for(i=2;i<=n;i++){ if(w[i]<=1) d2[i]+=d1[f[i]],d2[f[i]]+=d1[i]; else if(w[i]<=2) d2[i]++,d2[f[i]]++; } for(i=1;i<=n;i++) printf("%d\n",d2[i]+1); return 0; }