比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 ychyyx 运行时间 1.101 s
代码语言 C++ 内存使用 7.31 MiB
提交时间 2026-02-08 10:05:35
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,q;
int color[200005];
int u,v;
int h[200005],nxt[400005],to[400005];
int cnt;
int f[200005];
int ans;
int w,x;
void add(int a,int b){
    to[++cnt]=b;
    nxt[cnt]=h[a];
    h[a]=cnt;
}
void dfs(int u,int fa){
    f[u]=fa;
    if(color[u]!=color[fa])    ans++;
    for(int i=h[u];i;i=nxt[i]){
        int v=to[i];
        if(v==fa)   continue;
        dfs(v,u);
    }
}
void ac(int u,int new_color){
    if(color[u]==new_color) return ;
    for(int i=h[u];i;i=nxt[i]){
        int v=to[i];
        if(color[u]==color[v])  ans++;
        else if(new_color==color[v])    ans--;
    }
    color[u]=new_color;
}
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",&color[i]);
    }
    add(0,1);
    add(1,0); 
    for(int i=1;i<n;i++){
        scanf("%d%d",&u,&v);
        add(u,v);
        add(v,u);
    }
    dfs(1,0);
    for(int i=1;i<=q;i++){
        scanf("%d%d",&w,&x);
        ac(w,x);
        printf("%d\n",ans);
    }
    return 0;
}