//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "o"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r)
{
return uniform_int_distribution<ll> (l, r)(rng);
}
inline void rf()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if(fopen(file".inp","r"))
{
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const int mod=998244353;
const int maxn=3e5+15;
const ll inf=5e16;
template<typename T> inline void add(T &x, const T &y)
{
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
template<typename T> inline bool maxi(T &a, T b)
{
if(a>=b) return 0;
a=b; return 1;
}
template<typename T> inline bool mini(T &a, T b)
{
if(a<=b) return 0;
a=b; return 1;
}
struct HashTable {
struct Node{int k,v,nx;};
static vector<Node> pool;
static int ptr;
vector<int> head;
int B;
HashTable():B(0){}
inline uint64_t hsh(uint64_t x) const {
x+=0x9e3779b97f4a7c15ULL;
x=(x^(x>>30))*0xbf58476d1ce4e5b9ULL;
x=(x^(x>>27))*0x94d049bb133111ebULL;
x^=(x>>31);
return x;
}
void max_load_factor(float) {}
void reserve(size_t nb){ resize((int)nb*2+3); }
void resize(int nb){
if(nb<1) nb=1;
int b=1; while(b<nb) b<<=1;
B=b; head.assign(B,-1);
}
struct iterator{
int id;
mutable pii tmp;
iterator(int _id=-1):id(_id){}
pii* operator->() const {
if(id!=-1){ tmp.fi=HashTable::pool[id].k; tmp.se=HashTable::pool[id].v; }
return &tmp;
}
bool operator==(const iterator& o) const { return id==o.id; }
bool operator!=(const iterator& o) const { return id!=o.id; }
};
iterator end() const { return iterator(-1); }
iterator find(int k){
if(!B) return end();
int b=(int)(hsh((uint64_t)(unsigned)k)&(uint64_t)(B-1));
for(int i=head[b]; i!=-1; i=pool[i].nx) if(pool[i].k==k) return iterator(i);
return end();
}
int& operator[](int k){
if(!B) resize(4);
int b=(int)(hsh((uint64_t)(unsigned)k)&(uint64_t)(B-1));
for(int i=head[b]; i!=-1; i=pool[i].nx) if(pool[i].k==k) return pool[i].v;
pool.push_back({k,0,head[b]}); head[b]=ptr++; return pool.back().v;
}
void erase(int k){
if(!B) return;
int b=(int)(hsh((uint64_t)(unsigned)k)&(uint64_t)(B-1));
int i=head[b], p=-1;
while(i!=-1){
if(pool[i].k==k){
if(p==-1) head[b]=pool[i].nx; else pool[p].nx=pool[i].nx;
return;
}
p=i; i=pool[i].nx;
}
}
};
vector<HashTable::Node> HashTable::pool;
int HashTable::ptr=0;
int n, q, ans=0;
vpii g[maxn];
int par[maxn], up[maxn], h[maxn];
struct edge{int u, v, c;} e[maxn];
HashTable mp[maxn];
bool vs[maxn];
void dfs(int u)
{
for(auto v:g[u]) if(v.fi!=par[u])
{
par[v.fi]=u; up[v.fi]=v.se; h[v.fi]=h[u]+1;
dfs(v.fi);
}
}
void pre(int i)
{
vs[i]=1;
int u=e[i].u, v=e[i].v, c=e[i].c;
for(auto id:g[u]) if(!vs[id.se])
{
if(e[id.se].c==c) pre(id.se);
}
for(auto id:g[v]) if(!vs[id.se])
{
if(e[id.se].c==c) pre(id.se);
}
}
signed main()
{
rf();
int sub; cin>>sub;
cin>>n;
ff(i, 1, n-1)
{
int u ,v, c; cin>>u>>v>>c;
e[i]={u, v, c};
g[u].pb(v, i); g[v].pb(u, i);
}
dfs(1);
ff(i, 1, n-1)
{
int &u=e[i].u, &v=e[i].v;
if(h[u]>h[v]) swap(u, v);
}
ff(i, 1, n-1) if(!vs[i]) ++ans, pre(i);
ff(i, 1, n)
{
mp[i].reserve(g[i].size());
for(auto x:g[i]) if(x.fi!=par[i]) ++mp[i][e[x.se].c];
}
cout<<ans<<ss;
cin>>q;
while(q--)
{
int i, nc; cin>>i>>nc;
if(nc!=e[i].c)
{
int &u=e[i].u, &v=e[i].v, &c=e[i].c;
int parid=up[u];
bool ok1=(mp[v].find(c)!=mp[v].end());
auto it=mp[u].find(c);
bool ok2=((it!=mp[u].end() && (it->se)>=2) || e[parid].c==c);
if(ok1) ++ans;
if(ok2) ++ans;
if(--mp[u][c]==0) mp[u].erase(c);
c=nc;
++mp[u][c];
ok1=(mp[v].find(c)!=mp[v].end());
it=mp[u].find(c);
ok2=((it!=mp[u].end() && (it->se)>=2) || e[parid].c==c);
if(ok1) --ans;
if(ok2) --ans;
}
cout<<ans<<ss;
}
re;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAibyIKI2RlZmluZSBmZihpLCBhLCBiKSBmb3IoYXV0byBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgZmZyKGksIGIsIGEpIGZvcihhdXRvIGk9KGIpOyBpPj0oYSk7IC0taSkKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgc3MgIiAiCiNkZWZpbmUgcGIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBzeihzKSAoaW50KXMuc2l6ZSgpCiNkZWZpbmUgYWxsKHMpIChzKS5iZWdpbigpLCAocykuZW5kKCkKI2RlZmluZSBtcyhhLHgpIG1lbXNldChhLCB4LCBzaXplb2YgKGEpKQojZGVmaW5lIGNuIGNvbnRpbnVlCiNkZWZpbmUgcmUgZXhpdCgwKQoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKdHlwZWRlZiB2ZWN0b3I8cGlpPiB2cGlpOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZwbGw7CgptdDE5OTM3XzY0IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwpsbCByYW4obGwgbCwgbGwgcikKewogICAgcmV0dXJuIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxsbD4gKGwsIHIpKHJuZyk7Cn0KCmlubGluZSB2b2lkIHJmKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOyBjb3V0LnRpZShudWxscHRyKTsKICAgIGlmKGZvcGVuKGZpbGUiLmlucCIsInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKGZpbGUiLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9Cn0KCmNvbnN0IGludCBtb2Q9OTk4MjQ0MzUzOwpjb25zdCBpbnQgbWF4bj0zZTUrMTU7CmNvbnN0IGxsIGluZj01ZTE2OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgYWRkKFQgJngsIGNvbnN0IFQgJnkpCnsKICAgIHgrPXk7CiAgICBpZih4Pj1tb2QpIHgtPW1vZDsKICAgIGlmKHg8MCkgeCs9bW9kOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBtYXhpKFQgJmEsIFQgYikKewogICAgaWYoYT49YikgcmV0dXJuIDA7CiAgICBhPWI7IHJldHVybiAxOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBtaW5pKFQgJmEsIFQgYikKewogICAgaWYoYTw9YikgcmV0dXJuIDA7CiAgICBhPWI7IHJldHVybiAxOwp9CgpzdHJ1Y3QgSGFzaFRhYmxlIHsKICAgIHN0cnVjdCBOb2Rle2ludCBrLHYsbng7fTsKICAgIHN0YXRpYyB2ZWN0b3I8Tm9kZT4gcG9vbDsKICAgIHN0YXRpYyBpbnQgcHRyOwogICAgdmVjdG9yPGludD4gaGVhZDsKICAgIGludCBCOwogICAgSGFzaFRhYmxlKCk6QigwKXt9CiAgICBpbmxpbmUgdWludDY0X3QgaHNoKHVpbnQ2NF90IHgpIGNvbnN0IHsKICAgICAgICB4Kz0weDllMzc3OWI5N2Y0YTdjMTVVTEw7CiAgICAgICAgeD0oeF4oeD4+MzApKSoweGJmNTg0NzZkMWNlNGU1YjlVTEw7CiAgICAgICAgeD0oeF4oeD4+MjcpKSoweDk0ZDA0OWJiMTMzMTExZWJVTEw7CiAgICAgICAgeF49KHg+PjMxKTsKICAgICAgICByZXR1cm4geDsKICAgIH0KICAgIHZvaWQgbWF4X2xvYWRfZmFjdG9yKGZsb2F0KSB7fQogICAgdm9pZCByZXNlcnZlKHNpemVfdCBuYil7IHJlc2l6ZSgoaW50KW5iKjIrMyk7IH0KICAgIHZvaWQgcmVzaXplKGludCBuYil7CiAgICAgICAgaWYobmI8MSkgbmI9MTsKICAgICAgICBpbnQgYj0xOyB3aGlsZShiPG5iKSBiPDw9MTsKICAgICAgICBCPWI7IGhlYWQuYXNzaWduKEIsLTEpOwogICAgfQogICAgc3RydWN0IGl0ZXJhdG9yewogICAgICAgIGludCBpZDsKICAgICAgICBtdXRhYmxlIHBpaSB0bXA7CiAgICAgICAgaXRlcmF0b3IoaW50IF9pZD0tMSk6aWQoX2lkKXt9CiAgICAgICAgcGlpKiBvcGVyYXRvci0+KCkgY29uc3QgewogICAgICAgICAgICBpZihpZCE9LTEpeyB0bXAuZmk9SGFzaFRhYmxlOjpwb29sW2lkXS5rOyB0bXAuc2U9SGFzaFRhYmxlOjpwb29sW2lkXS52OyB9CiAgICAgICAgICAgIHJldHVybiAmdG1wOwogICAgICAgIH0KICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG8pIGNvbnN0IHsgcmV0dXJuIGlkPT1vLmlkOyB9CiAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvKSBjb25zdCB7IHJldHVybiBpZCE9by5pZDsgfQogICAgfTsKICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKC0xKTsgfQogICAgaXRlcmF0b3IgZmluZChpbnQgayl7CiAgICAgICAgaWYoIUIpIHJldHVybiBlbmQoKTsKICAgICAgICBpbnQgYj0oaW50KShoc2goKHVpbnQ2NF90KSh1bnNpZ25lZClrKSYodWludDY0X3QpKEItMSkpOwogICAgICAgIGZvcihpbnQgaT1oZWFkW2JdOyBpIT0tMTsgaT1wb29sW2ldLm54KSBpZihwb29sW2ldLms9PWspIHJldHVybiBpdGVyYXRvcihpKTsKICAgICAgICByZXR1cm4gZW5kKCk7CiAgICB9CiAgICBpbnQmIG9wZXJhdG9yW10oaW50IGspewogICAgICAgIGlmKCFCKSByZXNpemUoNCk7CiAgICAgICAgaW50IGI9KGludCkoaHNoKCh1aW50NjRfdCkodW5zaWduZWQpaykmKHVpbnQ2NF90KShCLTEpKTsKICAgICAgICBmb3IoaW50IGk9aGVhZFtiXTsgaSE9LTE7IGk9cG9vbFtpXS5ueCkgaWYocG9vbFtpXS5rPT1rKSByZXR1cm4gcG9vbFtpXS52OwogICAgICAgIHBvb2wucHVzaF9iYWNrKHtrLDAsaGVhZFtiXX0pOyBoZWFkW2JdPXB0cisrOyByZXR1cm4gcG9vbC5iYWNrKCkudjsKICAgIH0KICAgIHZvaWQgZXJhc2UoaW50IGspewogICAgICAgIGlmKCFCKSByZXR1cm47CiAgICAgICAgaW50IGI9KGludCkoaHNoKCh1aW50NjRfdCkodW5zaWduZWQpaykmKHVpbnQ2NF90KShCLTEpKTsKICAgICAgICBpbnQgaT1oZWFkW2JdLCBwPS0xOwogICAgICAgIHdoaWxlKGkhPS0xKXsKICAgICAgICAgICAgaWYocG9vbFtpXS5rPT1rKXsKICAgICAgICAgICAgICAgIGlmKHA9PS0xKSBoZWFkW2JdPXBvb2xbaV0ubng7IGVsc2UgcG9vbFtwXS5ueD1wb29sW2ldLm54OwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHA9aTsgaT1wb29sW2ldLm54OwogICAgICAgIH0KICAgIH0KfTsKdmVjdG9yPEhhc2hUYWJsZTo6Tm9kZT4gSGFzaFRhYmxlOjpwb29sOwppbnQgSGFzaFRhYmxlOjpwdHI9MDsKCmludCBuLCBxLCBhbnM9MDsKdnBpaSBnW21heG5dOwppbnQgcGFyW21heG5dLCB1cFttYXhuXSwgaFttYXhuXTsKc3RydWN0IGVkZ2V7aW50IHUsIHYsIGM7fSBlW21heG5dOwpIYXNoVGFibGUgbXBbbWF4bl07CmJvb2wgdnNbbWF4bl07Cgp2b2lkIGRmcyhpbnQgdSkKewogICAgZm9yKGF1dG8gdjpnW3VdKSBpZih2LmZpIT1wYXJbdV0pCiAgICB7CiAgICAgICAgcGFyW3YuZmldPXU7IHVwW3YuZmldPXYuc2U7IGhbdi5maV09aFt1XSsxOwogICAgICAgIGRmcyh2LmZpKTsKICAgIH0KfQoKdm9pZCBwcmUoaW50IGkpCnsKICAgIHZzW2ldPTE7CiAgICBpbnQgdT1lW2ldLnUsIHY9ZVtpXS52LCBjPWVbaV0uYzsKICAgIGZvcihhdXRvIGlkOmdbdV0pIGlmKCF2c1tpZC5zZV0pCiAgICB7CiAgICAgICAgaWYoZVtpZC5zZV0uYz09YykgcHJlKGlkLnNlKTsKICAgIH0KICAgIGZvcihhdXRvIGlkOmdbdl0pIGlmKCF2c1tpZC5zZV0pCiAgICB7CiAgICAgICAgaWYoZVtpZC5zZV0uYz09YykgcHJlKGlkLnNlKTsKICAgIH0KfQoKc2lnbmVkIG1haW4oKQp7CiAgICByZigpOwogICAgaW50IHN1YjsgY2luPj5zdWI7CiAgICBjaW4+Pm47CiAgICBmZihpLCAxLCBuLTEpCiAgICB7CiAgICAgICAgaW50IHUgLHYsIGM7IGNpbj4+dT4+dj4+YzsKICAgICAgICBlW2ldPXt1LCB2LCBjfTsKICAgICAgICBnW3VdLnBiKHYsIGkpOyBnW3ZdLnBiKHUsIGkpOwogICAgfQogICAgZGZzKDEpOwogICAgZmYoaSwgMSwgbi0xKQogICAgewogICAgICAgIGludCAmdT1lW2ldLnUsICZ2PWVbaV0udjsKICAgICAgICBpZihoW3VdPmhbdl0pIHN3YXAodSwgdik7CiAgICB9CiAgICBmZihpLCAxLCBuLTEpIGlmKCF2c1tpXSkgKythbnMsIHByZShpKTsKICAgIGZmKGksIDEsIG4pCiAgICB7CiAgICAgICAgbXBbaV0ucmVzZXJ2ZShnW2ldLnNpemUoKSk7CiAgICAgICAgZm9yKGF1dG8geDpnW2ldKSBpZih4LmZpIT1wYXJbaV0pICsrbXBbaV1bZVt4LnNlXS5jXTsKICAgIH0KICAgIGNvdXQ8PGFuczw8c3M7CiAgICBjaW4+PnE7CiAgICB3aGlsZShxLS0pCiAgICB7CiAgICAgICAgaW50IGksIG5jOyBjaW4+Pmk+Pm5jOwogICAgICAgIGlmKG5jIT1lW2ldLmMpCiAgICAgICAgewogICAgICAgICAgICBpbnQgJnU9ZVtpXS51LCAmdj1lW2ldLnYsICZjPWVbaV0uYzsKICAgICAgICAgICAgaW50IHBhcmlkPXVwW3VdOwogICAgICAgICAgICBib29sIG9rMT0obXBbdl0uZmluZChjKSE9bXBbdl0uZW5kKCkpOwogICAgICAgICAgICBhdXRvIGl0PW1wW3VdLmZpbmQoYyk7CiAgICAgICAgICAgIGJvb2wgb2syPSgoaXQhPW1wW3VdLmVuZCgpICYmIChpdC0+c2UpPj0yKSB8fCBlW3BhcmlkXS5jPT1jKTsKICAgICAgICAgICAgaWYob2sxKSArK2FuczsKICAgICAgICAgICAgaWYob2syKSArK2FuczsKICAgICAgICAgICAgaWYoLS1tcFt1XVtjXT09MCkgbXBbdV0uZXJhc2UoYyk7CiAgICAgICAgICAgIGM9bmM7CiAgICAgICAgICAgICsrbXBbdV1bY107CgogICAgICAgICAgICBvazE9KG1wW3ZdLmZpbmQoYykhPW1wW3ZdLmVuZCgpKTsKICAgICAgICAgICAgaXQ9bXBbdV0uZmluZChjKTsKICAgICAgICAgICAgb2syPSgoaXQhPW1wW3VdLmVuZCgpICYmIChpdC0+c2UpPj0yKSB8fCBlW3BhcmlkXS5jPT1jKTsKICAgICAgICAgICAgaWYob2sxKSAtLWFuczsKICAgICAgICAgICAgaWYob2syKSAtLWFuczsKICAgICAgICB9CiAgICAgICAgY291dDw8YW5zPDxzczsKICAgIH0KICAgIHJlOwp9Cg==