D题求大佬指点一下啊啊啊 只过了20% 求求~
D题 求大佬指点一下啊啊啊 只过了20% 求求~
#include<iostream> #include<cstring> using namespace std; const int N = 1e6 + 10; int n; int h[N], ne[N], e[N], idx, w[N]; int f[N][2]; void add_edge(int a, int b, int c){ idx ++; e[idx] = b; ne[idx] = h[a]; h[a] = idx; w[idx] = c; if(c == 1) f[a][0] ++; if(c == 2) f[a][1] ++; } int main(){ memset(h, -1, sizeof(h)); cin >> n; for(int i = 2; i <= n; i ++){ int a, b; scanf("%d%d", &a, &b); add_edge(a, i, b); add_edge(i, a, b); } for(int i = 1; i <= n; i ++){ for(int j = h[i]; j != -1; j = ne[j]){ if(w[j] == 1){ int t = e[j]; f[i][1] += f[t][0] - 1; } } } for(int i = 1; i <= n; i ++) printf("%d\n", f[i][0] + f[i][1] + 1); return 0; }