
#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
求调