比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 PXCZM 运行时间 1.469 s
代码语言 C++ 内存使用 13.97 MiB
提交时间 2026-02-08 10:30:17
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,k,q;
int a[200010],f[200010];
vector<int>g[200010];
int val[200010];
int ans;
void dfs(int rt,int fa,int p)
{
    f[rt]=fa;
    val[rt]=(k-(p+a[rt])%k)%k;
    if(val[rt]) ans++;
    int len=g[rt].size();
    for(int i=0;i<len;i++)
    {
        int to=g[rt][i];
        if(to==fa) continue;
        dfs(to,rt,(p+val[rt])%k);
    }
}
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++) cin>>a[i];
    for(int i=1;i<n;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1,0,0);
    while(q--)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(val[x]) ans--;
        int tmp=(y+k-a[x])%k;
        a[x]=y;
        val[x]=(val[x]-tmp+k)%k;
        if(val[x]) ans++;
        int len=g[x].size();
        for(int i=0;i<len;i++)
        {
            int to=g[x][i];
            if(to==f[x]) continue;
            if(val[to]) ans--;
            val[to]=(val[to]+tmp)%k;
            if(val[to]) ans++;
        }
        cout<<ans<<'\n';
    }
    return 0;
}