【題解】AtCoder ABC 198E – Unique Color

【題目敘述】https://atcoder.jp/contests/abc198/tasks/abc198_e
【解題想法】DFS,樹DP

#include <iostream>
#include <vector>
using namespace std;
const int maxn = 100005;
int C[maxn];
int cnt[maxn];
int ans[maxn];
vector <int> G[maxn];

void dfs(int now, int pre) {
    cnt[C[now]]++;
    if (cnt[C[now]] == 1) ans[now] = 1;
    for (auto nxt : G[now]) {
        if (nxt == pre) continue;
        dfs(nxt, now);
    }
    cnt[C[now]]--;
}

int main() {
    int N, A, B;
    cin >> N;
    for (int i = 1; i <= N; i++) {
        cin >> C[i];
    }
    for (int i = 1; i < N; i++) {
        cin >> A >> B;
        G[A].push_back(B);
        G[B].push_back(A);
    }
    dfs(1, 1);
    for (int i = 1; i <= N; i++) {
        if (ans[i]) cout << i << "\n";
    }
    return 0;
}
分享本文 Share with friends