比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 dbk 运行时间 1.243 s
代码语言 C++ 内存使用 13.53 MiB
提交时间 2026-02-08 09:44:46
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, k, q, ans;
int c[N], laf[N];
vector<int>g[N]; 
void dfs(int now, int fa){
    if(now == fa) return ;
    for(auto it : g[now]){
        if(fa != it) dfs(it, now);
    }
    
    if(fa >= 0){
        laf[now] = c[fa];
    }
    if(c[now] != c[fa]) ans++;
}
int main(){
    freopen("tioj_outplay.in", "r", stdin);
    freopen("tioj_outplay.out", "w", stdout);
    scanf("%d %d %d", &n, &k, &q);
    for(int i = 1;i <= n;i++) scanf("%d", &c[i]);
    for(int i = 1;i < n;i++){
        int u, v;
        scanf("%d %d", &u, &v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    g[0].push_back(1);
    g[1].push_back(0);
    dfs(0, -1);
    while(q--){
        int w, x, m;
        scanf("%d %d", &w, &x);
        m = c[w];
        c[w] = x;
        for(auto it : g[w]){
            if(m == c[it] && c[w] != c[it]) ans++;
            else if(m != c[it] && c[w] == c[it]) ans--;
        }
        printf("%d\n", ans);
    }
}