求助站外(可能)题
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/3/9 22:07
  • 上次更新2023/10/23 22:04:13
查看原帖
求助站外(可能)题
639563
封禁用户楼主2023/3/9 22:07

#include <bits/stdc++.h>
using namespace std;

pair<int, int> p[200005];
vector<pair<int, int> > child[200005];
vector<pair<int, int> > graph[200005];
bool broken[200005];
set<int> st;

void precal_dfs(int x, int fa) {
    for (auto adj : graph[x]) {
        if (adj.first != fa) {
            p[adj.first] = make_pair(x, adj.second);
            child[x].push_back(adj);
            precal_dfs(adj.first, x);
        }
    }
}

bool broken_dfs(int x) {
    bool ans = 0;
    for (auto ch : child[x]) {
        if (broken_dfs(ch.first) == 1) {
            ans = 1;
        }
    }
    for (auto ch : child[x]) {
        if (ch.second == 0) {
            ans = 1;
        }
    }
    return broken[x] = ans;
}

int final_dfs(int x, bool bro = 1) {
    if (!bro) {
        int mn = x;
        for (auto adj : child[x]) {
            mn = min(mn, final_dfs(adj.first, 0));
        }
        return mn;
    }
    if (!broken[x]) {
        if (x == 0) {
            return 0x3f3f3f3f;
        }
        if (p[x].second == 0) {
            st.insert(final_dfs(x, 0));
        }
    } else {
        for (auto adj : child[x]) {
            final_dfs(adj.first, 1);
        }
        return 0x3f3f3f3f;
    }
}

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n - 1; i++) {
        int u, v, x;
        scanf("%d %d %d", &u, &v, &x);
        u--, v--;
        if (x == 2) {
            x = 0;
        }
        graph[u].emplace_back(v, x);
        graph[v].emplace_back(u, x);
    }
    precal_dfs(0, -1);
    broken_dfs(0);
    final_dfs(0);
    //	for (int i = 0; i < n; i++) {
    //		cerr << broken[i] << " ";
    //	}
    //	cerr << endl;
    //	for (int i = 0; i < n; i++) {
    //		for (auto adj : child[i]) {
    //			cerr << adj.first << " ";
    //		}
    //		cerr << endl;
    //	}
    printf("%d\n", st.size());
    for (auto ele : st) {
        printf("%d ", ele + 1);
    }
    return 0;
}

出现了奇怪的RE:"Killed: Segmentation fault" 数据:

5
1 3 2
5 4 2
2 1 2
4 3 2

求调

2023/3/9 22:07
加载中...