| 比赛 |
期末考试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();
}
}