树的重量TLE0分求解!

树的重量TLE0分输入输出都对了

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n;
int size[N];
int h[N], e[N << 1], ne[N << 1], idx;
void add(int a, int b) {
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx++;
}
void dfs(int u, int parent) {
    size[u] = 1;
    
    for (int i = h[u]; i != -1; i = ne[i]) {
        int v = e[i];
        if (v != parent) {
            dfs(v, u);
            size[u] += size[v];
        }
    }
}

int main() {
    cin >> n;

    memset(h, -1, sizeof(h));
    for (int i = 0; i < n - 1; i++) {
        int a, b;
        cin >> a >> b;
        add(a, b);
        add(b, a);
    }

    dfs(1, -1);

    for (int i = 1; i <= n; i++) {
        cout << size[i] << endl;
    }

    return 0;
}
4 个赞

题目数据多达10^5,此时就要注意由cin,cout引起的超时问题。

改用scanf,printf试试吧!

:heavy_heart_exclamation:
题外话:哈哈哈你这个头像不错

7 个赞