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;
}
全部评论
解决了 邻接表数组要开2倍 呜呜呜呜呜
点赞 回复 分享
发布于 2022-03-26 14:50

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务