#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxn = 3e5;
const int maxlog = 18;
int subtask, n, q, dist[maxn + 10], sz[maxn + 10], p[maxn + 10][maxlog + 5], tin[maxn + 10], tout[maxn + 10], timer = 0;
int par_centroid[maxn + 10];
ll cnt[maxn + 10], sum_dist[maxn + 10], sum_dist_par[maxn + 10];
bool check[maxn + 10], is_centroid[maxn + 10];
ll ans = 0;
vector<ii> adj[maxn + 10];
void build_sz(int top, int par)
{
sz[top] = 1;
for (ii pr : adj[top])
{
int next_top = pr.fi;
if (next_top == par || is_centroid[next_top])
continue;
build_sz(next_top, top);
sz[top] += sz[next_top];
}
}
int find_centroid(int top, int par, int tree_sz)
{
for (ii pr : adj[top])
{
int next_top = pr.fi;
if (next_top == par || is_centroid[next_top])
continue;
if (2 * sz[next_top] > tree_sz)
return find_centroid(next_top, top, tree_sz);
}
return top;
}
void build_centroid_tree(int top, int par = -1)
{
build_sz(top, -1);
int centroid = find_centroid(top, -1, sz[top]);
is_centroid[centroid] = 1;
if (par != -1)
{
// cout << par << ' ' << centroid, el;
par_centroid[centroid] = par;
}
for (ii pr : adj[centroid])
{
int next_top = pr.fi;
if (!is_centroid[next_top])
build_centroid_tree(next_top, centroid);
}
}
void dfs(int top, int par = 0)
{
tin[top] = ++timer;
p[top][0] = par;
for (int i = 1; i <= maxlog; i++)
p[top][i] = p[p[top][i - 1]][i - 1];
for (ii pr : adj[top])
{
int next_top = pr.fi;
int w = pr.se;
if (next_top == par)
continue;
dist[next_top] = dist[top] + w;
dfs(next_top, top);
}
tout[top] = timer;
}
bool is_ancestor(int x, int y)
{
if (x == 0 || y == 0)
return 1;
return tin[x] <= tin[y] && tout[y] <= tout[x];
}
int get_lca(int x, int y)
{
if (is_ancestor(x, y))
return x;
if (is_ancestor(y, x))
return y;
for (int i = maxlog; i >= 0; i--)
if (!is_ancestor(p[x][i], y))
x = p[x][i];
return p[x][0];
}
int get_dist(int x, int y)
{
return dist[x] + dist[y] - 2 * dist[get_lca(x, y)];
}
void update(int x, int mobius)
{
int pre_par = 0;
for (int u = x; u; u = par_centroid[u])
{
cnt[u] += mobius;
sum_dist[u] += mobius * get_dist(u, x);
if (pre_par)
sum_dist_par[pre_par] += mobius * get_dist(u, x);
pre_par = u;
// cout << u << ' ' << x << ' ' << cnt[u] << ' ' << sum_dist[u], el;
}
}
ll get(int x, int mobius)
{
ll ans = 0;
int pre_par = 0;
for (int u = x; u; u = par_centroid[u])
{
// cout << pre_par << ' ' << cnt[u] << ' ' << cnt[pre_par] << ' ' << sum_dist[u] << ' ' << sum_dist_par[pre_par], el;
ans += mobius * (1ll * get_dist(u, x) * (cnt[u] - cnt[pre_par]) + sum_dist[u] - sum_dist_par[pre_par]);
pre_par = u;
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("BUBBLEMPIRE.INP", "r"))
{
freopen("BUBBLEMPIRE.INP", "r", stdin);
freopen("BUBBLEMPIRE.OUT", "w", stdout);
}
cin >> subtask;
cin >> n >> q;
for (int i = 1; i < n; i++)
{
int x, y;
ll w;
cin >> x >> y >> w;
adj[x].push_back(ii(y, w));
adj[y].push_back(ii(x, w));
}
dfs(1);
build_centroid_tree(1);
for (int i = 1; i <= n; i++)
{
char c;
cin >> c;
check[i] = c - '0';
if (check[i] == 1)
{
ans += get(i, 1);
update(i, 1);
}
}
cout << ans << ' ';
while (q--)
{
int x;
cin >> x;
if (check[x] == 0)
{
ans += get(x, 1);
update(x, 1);
}
else
{
update(x, -1);
ans += get(x, -1);
}
check[x] ^= 1;
cout << ans << ' ';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZyAKI2RlZmluZSBlbCBjb3V0IDw8ICdcbicKI2RlZmluZSBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gID0gM2U1Owpjb25zdCBpbnQgbWF4bG9nID0gMTg7CgppbnQgc3VidGFzaywgbiwgcSwgZGlzdFttYXhuICsgMTBdLCBzelttYXhuICsgMTBdLCBwW21heG4gKyAxMF1bbWF4bG9nICsgNV0sIHRpblttYXhuICsgMTBdLCB0b3V0W21heG4gKyAxMF0sIHRpbWVyID0gMDsKaW50IHBhcl9jZW50cm9pZFttYXhuICsgMTBdOwpsbCBjbnRbbWF4biArIDEwXSwgc3VtX2Rpc3RbbWF4biArIDEwXSwgc3VtX2Rpc3RfcGFyW21heG4gKyAxMF07CmJvb2wgY2hlY2tbbWF4biArIDEwXSwgaXNfY2VudHJvaWRbbWF4biArIDEwXTsKbGwgYW5zID0gMDsKdmVjdG9yPGlpPiBhZGpbbWF4biArIDEwXTsKCnZvaWQgYnVpbGRfc3ooaW50IHRvcCwgaW50IHBhcikKewogICAgc3pbdG9wXSA9IDE7CiAgICBmb3IgKGlpIHByIDogYWRqW3RvcF0pCiAgICB7CiAgICAgICAgaW50IG5leHRfdG9wID0gcHIuZmk7CiAgICAgICAgaWYgKG5leHRfdG9wID09IHBhciB8fCBpc19jZW50cm9pZFtuZXh0X3RvcF0pCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGJ1aWxkX3N6KG5leHRfdG9wLCB0b3ApOwogICAgICAgIHN6W3RvcF0gKz0gc3pbbmV4dF90b3BdOwogICAgfQp9CmludCBmaW5kX2NlbnRyb2lkKGludCB0b3AsIGludCBwYXIsIGludCB0cmVlX3N6KQp7CiAgICBmb3IgKGlpIHByIDogYWRqW3RvcF0pCiAgICB7CiAgICAgICAgaW50IG5leHRfdG9wID0gcHIuZmk7CiAgICAgICAgaWYgKG5leHRfdG9wID09IHBhciB8fCBpc19jZW50cm9pZFtuZXh0X3RvcF0pCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmICgyICogc3pbbmV4dF90b3BdID4gdHJlZV9zeikKICAgICAgICAgICAgcmV0dXJuIGZpbmRfY2VudHJvaWQobmV4dF90b3AsIHRvcCwgdHJlZV9zeik7CiAgICB9CiAgICByZXR1cm4gdG9wOwp9CnZvaWQgYnVpbGRfY2VudHJvaWRfdHJlZShpbnQgdG9wLCBpbnQgcGFyID0gLTEpCnsKICAgIGJ1aWxkX3N6KHRvcCwgLTEpOwogICAgaW50IGNlbnRyb2lkID0gZmluZF9jZW50cm9pZCh0b3AsIC0xLCBzelt0b3BdKTsKICAgIGlzX2NlbnRyb2lkW2NlbnRyb2lkXSA9IDE7CgogICAgaWYgKHBhciAhPSAtMSkKICAgIHsKICAgICAgICAvLyBjb3V0IDw8IHBhciA8PCAnICcgPDwgY2VudHJvaWQsIGVsOwogICAgICAgIHBhcl9jZW50cm9pZFtjZW50cm9pZF0gPSBwYXI7CiAgICB9CgogICAgZm9yIChpaSBwciA6IGFkaltjZW50cm9pZF0pCiAgICB7CiAgICAgICAgaW50IG5leHRfdG9wID0gcHIuZmk7CiAgICAgICAgaWYgKCFpc19jZW50cm9pZFtuZXh0X3RvcF0pCiAgICAgICAgICAgIGJ1aWxkX2NlbnRyb2lkX3RyZWUobmV4dF90b3AsIGNlbnRyb2lkKTsKICAgIH0KfQp2b2lkIGRmcyhpbnQgdG9wLCBpbnQgcGFyID0gMCkKewogICAgdGluW3RvcF0gPSArK3RpbWVyOwogICAgcFt0b3BdWzBdID0gcGFyOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWF4bG9nOyBpKyspCiAgICAgICAgcFt0b3BdW2ldID0gcFtwW3RvcF1baSAtIDFdXVtpIC0gMV07CiAgICBmb3IgKGlpIHByIDogYWRqW3RvcF0pCiAgICB7CiAgICAgICAgaW50IG5leHRfdG9wID0gcHIuZmk7CiAgICAgICAgaW50IHcgPSBwci5zZTsKICAgICAgICBpZiAobmV4dF90b3AgPT0gcGFyKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBkaXN0W25leHRfdG9wXSA9IGRpc3RbdG9wXSArIHc7CiAgICAgICAgZGZzKG5leHRfdG9wLCB0b3ApOwogICAgfQogICAgdG91dFt0b3BdID0gdGltZXI7Cn0KYm9vbCBpc19hbmNlc3RvcihpbnQgeCwgaW50IHkpCnsKICAgIGlmICh4ID09IDAgfHwgeSA9PSAwKQogICAgICAgIHJldHVybiAxOwogICAgcmV0dXJuIHRpblt4XSA8PSB0aW5beV0gJiYgdG91dFt5XSA8PSB0b3V0W3hdOwp9CmludCBnZXRfbGNhKGludCB4LCBpbnQgeSkKewogICAgaWYgKGlzX2FuY2VzdG9yKHgsIHkpKQogICAgICAgIHJldHVybiB4OwogICAgaWYgKGlzX2FuY2VzdG9yKHksIHgpKQogICAgICAgIHJldHVybiB5OwogICAgZm9yIChpbnQgaSA9IG1heGxvZzsgaSA+PSAwOyBpLS0pCiAgICAgICAgaWYgKCFpc19hbmNlc3RvcihwW3hdW2ldLCB5KSkKICAgICAgICAgICAgeCA9IHBbeF1baV07CiAgICByZXR1cm4gcFt4XVswXTsKfQppbnQgZ2V0X2Rpc3QoaW50IHgsIGludCB5KQp7CiAgICByZXR1cm4gZGlzdFt4XSArIGRpc3RbeV0gLSAyICogZGlzdFtnZXRfbGNhKHgsIHkpXTsKfQp2b2lkIHVwZGF0ZShpbnQgeCwgaW50IG1vYml1cykKewogICAgaW50IHByZV9wYXIgPSAwOwogICAgZm9yIChpbnQgdSA9IHg7IHU7IHUgPSBwYXJfY2VudHJvaWRbdV0pCiAgICB7CiAgICAgICAgY250W3VdICs9IG1vYml1czsKICAgICAgICBzdW1fZGlzdFt1XSArPSBtb2JpdXMgKiBnZXRfZGlzdCh1LCB4KTsKICAgICAgICBpZiAocHJlX3BhcikKICAgICAgICAgICAgc3VtX2Rpc3RfcGFyW3ByZV9wYXJdICs9IG1vYml1cyAqIGdldF9kaXN0KHUsIHgpOwogICAgICAgIHByZV9wYXIgPSB1OwogICAgICAgIC8vIGNvdXQgPDwgdSA8PCAnICcgPDwgeCA8PCAnICcgPDwgY250W3VdIDw8ICcgJyA8PCBzdW1fZGlzdFt1XSwgZWw7CiAgICB9Cn0KbGwgZ2V0KGludCB4LCBpbnQgbW9iaXVzKQp7CiAgICBsbCBhbnMgPSAwOwogICAgaW50IHByZV9wYXIgPSAwOwogICAgZm9yIChpbnQgdSA9IHg7IHU7IHUgPSBwYXJfY2VudHJvaWRbdV0pCiAgICB7CiAgICAgICAgLy8gY291dCA8PCBwcmVfcGFyIDw8ICcgJyA8PCBjbnRbdV0gPDwgJyAnIDw8IGNudFtwcmVfcGFyXSA8PCAnICcgPDwgc3VtX2Rpc3RbdV0gPDwgJyAnIDw8IHN1bV9kaXN0X3BhcltwcmVfcGFyXSwgZWw7CiAgICAgICAgYW5zICs9IG1vYml1cyAqICgxbGwgKiBnZXRfZGlzdCh1LCB4KSAqIChjbnRbdV0gLSBjbnRbcHJlX3Bhcl0pICsgc3VtX2Rpc3RbdV0gLSBzdW1fZGlzdF9wYXJbcHJlX3Bhcl0pOwogICAgICAgIHByZV9wYXIgPSB1OwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiQlVCQkxFTVBJUkUuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJCVUJCTEVNUElSRS5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJCVUJCTEVNUElSRS5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IHN1YnRhc2s7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgbGwgdzsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHc7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayhpaSh5LCB3KSk7CiAgICAgICAgYWRqW3ldLnB1c2hfYmFjayhpaSh4LCB3KSk7CiAgICB9CiAgICBkZnMoMSk7CiAgICBidWlsZF9jZW50cm9pZF90cmVlKDEpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGNoYXIgYzsKICAgICAgICBjaW4gPj4gYzsKICAgICAgICBjaGVja1tpXSA9IGMgLSAnMCc7CiAgICAgICAgaWYgKGNoZWNrW2ldID09IDEpCiAgICAgICAgewogICAgICAgICAgICBhbnMgKz0gZ2V0KGksIDEpOwogICAgICAgICAgICB1cGRhdGUoaSwgMSk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnMgPDwgJyAnOwogICAgd2hpbGUgKHEtLSkKICAgIHsKICAgICAgICBpbnQgeDsKICAgICAgICBjaW4gPj4geDsKICAgICAgICBpZiAoY2hlY2tbeF0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGFucyArPSBnZXQoeCwgMSk7CiAgICAgICAgICAgIHVwZGF0ZSh4LCAxKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdXBkYXRlKHgsIC0xKTsKICAgICAgICAgICAgYW5zICs9IGdldCh4LCAtMSk7CiAgICAgICAgfQogICAgICAgIGNoZWNrW3hdIF49IDE7CiAgICAgICAgY291dCA8PCBhbnMgPDwgJyAnOwogICAgfQp9