比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 Ruyi 运行时间 1.473 s
代码语言 C++ 内存使用 20.14 MiB
提交时间 2026-02-08 09:26:16
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 200001
using namespace std;
int ans,n,k,q,fa[N],d[N];
vector<int> adj[N];
vector<int> son[N];
int mod(int x){
    x%=k;
    if(x<0) x+=k;
    return x;
}
void dfs(int u,int f){
    fa[u]=f;
    for(int v:adj[u]){
        if(v!=f){
            son[u].push_back(v);
            dfs(v,u);
        }
    }
    return ;
}
bool check(int a,int b){return mod(a-b)!=0;}
int main(){
    freopen("tioj_outplay.in","r",stdin);
    freopen("tioj_outplay.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>k>>q;
    vector<int> c(n+1);
    for(int i=1;i<=n;i++){
        cin>>c[i];
        d[i]=mod(-c[i]);
    }
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(1,0);
    for(int u=1;u<=n;u++){
        if(check(d[u],d[fa[u]]))ans++;
    }
    while(q--){
        int w,x;
        cin>>w>>x;
        int old=d[w],nw=mod(-x);
        if(old==nw){
            cout<<ans<<'\n';
            continue;
        }
        if(check(old,d[fa[w]]))ans--;
        d[w]=nw;
        if(check(nw,d[fa[w]]))ans++;
        for(int v:son[w]){
            if(check(d[v],old))ans--;
            if(check(d[v],nw))ans++;
        }
        cout<<ans<<'\n';
    }
    return 0;
}