比赛 期末考试1 评测结果 AAAAAAAAAA
题目名称 Output Only 最终得分 100
用户昵称 梦那边的美好BP 运行时间 2.720 s
代码语言 C++ 内存使用 7.71 MiB
提交时间 2026-02-08 11:14:27
显示代码纯文本
#include <iostream>
using namespace std;
const int N = 2e5 + 5;
int hd[N], to[N * 2], nxt[N * 2], num = 0;
void add(int x, int y) {
    num++;
    to[num] = y;
    nxt[num] = hd[x];
    hd[x] = num;
}
int c[N], fa[N], d[N];
int n, k, q;
int ans = 0;
void dfs(int x, int f) {
    fa[x] = f;
    if (d[x] != 0) ans++;
    for (int i = hd[x]; i; i = nxt[i]) {
        int v = to[i];
        if (v == f) continue;
        d[v] = (c[v] - c[x] + k) % k;
        dfs(v, x);
    }
}
int main() {
    freopen("tioj_outplay.in", "r", stdin);
    freopen("tioj_outplay.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> k >> q;
    for (int i = 1; i <= n; i++) {
        cin >> c[i];
    }
    for (int i = 1; i <= n - 1; i++) {
        int u, v;
        cin >> u >> v;
        add(u, v);
        add(v, u);
    }
    d[1] = c[1];
    dfs(1, 0);
    // cout << ans;
    while (q--) {
        int w, x;
        cin >> w >> x;
        // int f = fa[w];
        int de = (x - c[w] + k) % k;
        int xi;
        if (w == 1)
            xi = x;
        else
            xi = (d[w] + de) % k;

        if (d[w] == 0 && xi != 0)
            ans++;
        else if (d[w] != 0 && xi == 0)
            ans--;
        d[w] = xi;
        for (int i = hd[w]; i; i = nxt[i]) {
            int v = to[i];
            if (v == fa[w]) continue;
            xi = (d[v] - de + k) % k;
            if (d[v] == 0 && xi != 0)
                ans++;
            else if (d[v] != 0 && xi == 0)
                ans--;
            d[v] = xi;
        }
        c[w] = x;
        cout << ans << endl;
    }
    return 0;
}