比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 zhyn 运行时间 1.699 s
代码语言 C++ 内存使用 14.02 MiB
提交时间 2026-02-08 10:08:29
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define maxn 200005

int n,k,q;
int a[maxn],b[maxn],f[maxn];
bool vis[maxn];
int ans=0;
vector<int>e[maxn];

void dfs(int u,int fa,int x){
    f[u]=fa;
    int y=k-(a[u]+x)%k;
    b[u]=x;
    
    if(y!=k){
        ans++;
        vis[u]=true;
    }
    else{
        y=0;
    }
    for(int v:e[u]){
        if(v==fa)
            continue; 
        dfs(v,u,x+y);
    }
    
}


void dfs1(int u,int x){
    int y=k-(a[u]+x)%k;
    b[u]=x;
    if(y==k&&vis[u]){
        ans--;
        y=0;
        vis[u]=false;
    }
    else if(y!=k&&!vis[u]){
        ans++;
        vis[u]=true;
    }
    for(int v:e[u]){
        if(v==f[u]){
            continue;
        }
        dfs1(v,x+y);
    }
}

int main(){
    
    
    freopen("tioj_outplay.in","r",stdin);
    freopen("tioj_outplay.out","w",stdout);
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    cin>>n>>k>>q;
    
    
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    
    
    dfs(1,0,0);
    
    while(q--){
        int u,x;
        cin>>u>>x;
        a[u]=x;
        dfs1(u,b[u]);
        cout<<ans<<"\n";
    }
    
    
    return 0;
}