| 比赛 |
期末考试1 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
Output Only |
最终得分 |
100 |
| 用户昵称 |
彭欣越 |
运行时间 |
3.759 s |
| 代码语言 |
C++ |
内存使用 |
35.89 MiB |
| 提交时间 |
2026-02-08 11:36:01 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200010;
int n,k,q,ans,t[N],c[N],s[N],f[N];
map<int,int>cnt[N];
vector<int>g[N];
void dfs(int u,int fa) {
f[u]=fa;
for (int v:g[u]) {
if (v!=fa) {
dfs(v,u);
cnt[u][t[v]]++;
}
}
}
int main () {
freopen("tioj_outplay.in","r",stdin);
freopen("tioj_outplay.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> k >> q;
for (int i=1;i<=n;i++) {
cin >> c[i];
t[i]=(k-c[i])%k;
}
for (int i=1;i<n;i++) {
int a,b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1,0);
for (int i=1;i<=n;i++) {
if (i==1) ans+=(t[1]!=0);
else ans+=(t[i]!=t[f[i]]);
}
//if (c[1]!=0) ans++;
//cout << ans <<endl;
for (int i=1;i<=q;i++) {
int w,x,sum=0;
cin >> w >> x;
if (t[w]!=(k-x)%k) {
if (w==1) {
if (t[w]==0&&(k-x)%k!=0) ans++;
else if (t[w]!=0&&(k-x)%k==0) ans--;
}else{
if (t[f[w]]==(k-x)%k&&t[f[w]]!=t[w]) ans--;
else if (t[f[w]]!=(k-x)%k&&t[f[w]]==t[w]) ans++;
}
ans+=cnt[w][t[w]]-cnt[w][(k-x)%k];
int a=t[w],b=(k-x)%k;
t[w]=(k-x)%k;
if (w!=1) {
cnt[f[w]][a]--;
if (cnt[f[w]][a]==0) cnt[f[w]].erase(a);
cnt[f[w]][b]++;
}
}
cout << ans <<endl;
}
return 0;
}