三原色玄关求调
查看原帖
三原色玄关求调
1036180
ChampionCyan楼主2024/7/10 14:10

红蓝绿三原色评测记录

忘关私 or @我

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
bool a[MAXN], vis[MAXN];
vector<int> e[MAXN];
int cnt = 0;

void dfs(int x, bool start) {
    if (a[x]) {
        if (start)
            cnt++;
        return;
    }
    if (vis[x])
        return;
    vis[x] = true;
    for (int i = 0; i < (int)e[x].size(); i++) {
        int tmp = cnt;
        dfs(e[x].at(i), true);
        if (cnt != tmp) {
            cnt++;
            return;
        }
    }
}

int main() {
    //freopen("test.in", "r", stdin);
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        int x;
        scanf("%d", &x);
        if (x)
            a[i] = true;
        else
            a[i] = false;
        vis[x] = false;
    }
    for (int i = 1; i < n; i++) {
        int x, y;
        scanf("%d%d", &x, &y);
        e[x].push_back(y);
        e[y].push_back(x);
    }
    for (int i = 1; i <= n; i++)
        dfs(i, false);
    printf("%d\n", cnt);
    return 0;
}
2024/7/10 14:10
加载中...