这题好像不能用c++
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define ls (x<<1)
#define rs (x<<1|1)
#define mid ((t[x].l+t[x].r)>>1)
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll mod=1e9+7,maxn=3e5+5,maxt=505;
ll n,head[maxn],tot,fa[maxn],dep[maxn],siz[maxn],top[maxn],big[maxn],dfn[maxn],id[maxn],cnt,dis[maxn];
vector<ll>son[maxn];
struct edge{
ll frm,to,nxt,val;
}e[maxn<<1];
inline void add(ll u,ll v,ll w){e[++tot]=(edge){u,v,head[u],w},head[u]=tot;}
struct node{
ll l,r,mx;
}t[maxn<<2];
inline void pushup(ll x){
t[x].mx=max(t[ls].mx,t[rs].mx);
}
inline void build(ll x,ll l,ll r){
t[x].l=l,t[x].r=r;
while(l==r){
t[x].mx=dis[id[l]];
return;
}
build(ls,l,mid);
build(rs,mid+1,r);
pushup(x);
}
inline void update(ll x,ll pos,ll k){
if(t[x].l==t[x].r){
t[x].mx=k;
return;
}
if(pos<=mid)update(ls,pos,k);
else update(rs,pos,k);
pushup(x);
}
inline ll query(ll x,ll l,ll r){
if(l<=t[x].l&&t[x].r<=r)return t[x].mx;
ll ans=0;
if(l<=mid)ans=max(ans,query(ls,l,r));
if(r>mid)ans=max(ans,query(rs,l,r));
return ans;
}
inline void dfs1(ll u,ll pre){
dep[u]=dep[pre]+1,fa[u]=pre,siz[u]=1;
for(ll i=head[u];i;i=e[i].nxt){
ll v=e[i].to;
if(v==pre)continue;
dfs1(v,u);
siz[u]+=siz[v];
dis[v]=e[i].val;
if(siz[v]>siz[big[u]])big[u]=v;
}
}
inline void dfs2(ll u,ll pre){
dfn[u]=++cnt,id[cnt]=u,top[u]=pre;
if(big[u])dfs2(big[u],pre);
for(ll i=head[u];i;i=e[i].nxt){
ll v=e[i].to;
if(v==fa[u]||v==big[u])continue;
dfs2(v,v);
}
}
inline ll ask(ll u,ll v){
if(u==v)return 0;
ll ans=0;
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]])swap(u,v);
ans=max(ans,query(1,dfn[top[u]],dfn[u]));
u=fa[top[u]];
}
if(dep[u]>dep[v])swap(u,v);
ans=max(ans,query(1,dfn[u]+1,dfn[v]));
return ans;
}
inline void solve(){
memset(head,0,sizeof(head));
memset(t,0,sizeof(t));
tot=0,cnt=0;
n=read();
for(ll i=1;i<n;++i){
ll u=read(),v=read(),w=read();
add(u,v,w),add(v,u,w);
}
dfs1(1,0),dfs2(1,1),build(1,1,n);
string op;
while(cin>>op&&op!="DONE"){
if(op=="CHANGE"){
ll x=read(),t=read();
ll u=e[x*2-1].frm,v=e[x*2-1].to;
if(fa[v]=u)u=v;
update(1,dfn[u],t);
}
else{
ll u=read(),v=read();
printf("%lld\n",ask(u,v));
}
}
}
signed main(){
ll t=read();
while(t--)solve();
return 0;
}