比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 zcx 运行时间 3.987 s
代码语言 C++ 内存使用 13.38 MiB
提交时间 2026-02-08 08:47:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int const N=2e5+2;
vector<int> g[N];
int col[N],fa[N],ans=0;
void dfs(int num,int p){
    if(col[num]!=col[p]) ans++;
    fa[num]=p;
    for(int i=0;i<g[num].size();i++){
        int u=g[num][i];
        if(u==p) continue;
        dfs(u,num);
    }
}
int main()
{
    freopen("tioj_outplay.in","r",stdin);
    freopen("tioj_outplay.out","w",stdout);
    int n,k,Q;
    cin>>n>>k>>Q;
     for(int i=1;i<=n;i++) cin>>col[i];
     for(int i=1;i<n;i++){
         int u,v;
         cin>>u>>v;
         g[v].push_back(u);
         g[u].push_back(v);
     }
     dfs(1,0);
     while(Q--){
        int w,x;
        cin>>w>>x;
        if(col[w]!=col[fa[w]]&&x==col[fa[w]]) ans--;
        if(col[w]==col[fa[w]]&&x!=col[fa[w]]) ans++;
        for(int i=0;i<g[w].size();i++){
            int u=g[w][i];
            if(u==fa[w]) continue;
            if(col[w]!=col[u]&&x==col[u]) ans--;
        if(col[w]==col[u]&&x!=col[u]) ans++;
        }
        col[w]=x;
        cout<<ans<<endl;
     }
    return 0;
}