比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 小福鑫 运行时间 2.683 s
代码语言 C++ 内存使用 95.34 MiB
提交时间 2026-02-08 12:20:16
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
map<int,int>mp[1000001];
vector<int> g[1000001];
int n,k,q,u,v,w,x,ans,col[1000001],l[1000001],son[1000001];
void dfs(int u,int v){
	l[u]=v;
	for(auto i:g[u]){
		if(i==v){
		    continue;
        }
        son[u]++;
		mp[u][col[i]]++;
		dfs(i,u);
	}
}
void solve(){
    scanf("%d%d",&w,&x);
	if(col[l[w]]!=col[w]) ans--;
	ans-=(son[w]-mp[w][col[w]]);
	mp[l[w]][col[w]]--;
	col[w]=x;
	if(col[l[w]]!=col[w]) ans++;
	ans+=(son[w]-mp[w][col[w]]);
	mp[l[w]][col[w]]++;
	printf("%d\n",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",&col[i]);
	}
	for(int i=1;i<n;i++){
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1,0);
	if(col[1]){
	    ans=1;
    }
	for(int i=1;i<=n;i++){
		for(auto j:mp[i]){
			if(j.first!=col[i]){
				ans+=j.second;
			}
		}
	}
	while(q--){
	    solve();
	}
}