#include #define rep(i,n)for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef pairP; vector

E[60000]; ll d[60000]; int vid[60000],rev[60000]; int cl[60000],cr[60000]; multiset

se[60000]; int node_cnt; void dfs(int v,int p){ cl[v]=node_cnt; vid[v]=node_cnt++; rev[vid[v]]=v; for(auto u:E[v]){ if(u.second==p)continue; d[u.second]=d[v]+u.first; dfs(u.second,v); } cr[v]=node_cnt; } int main(){ int n,q;cin>>n>>q; assert(1<=n&&n<=50000); assert(1<=q&&q<=100000); rep(i,n-1){ int a,b;ll c;scanf("%d%d%lld",&a,&b,&c);a--;b--; E[a].push_back(P(c,b)); E[b].push_back(P(c,a)); } dfs(0,-1); rep(i,q){ int ty,v;ll t,l;scanf("%d%d%lld%lld",&ty,&v,&t,&l);v--; if(ty==0){ se[vid[v]].insert(P(t,l)); } else{ assert(l==0); int cnt=0; for(int i=cl[v];it-D)break; if(D<=p.second)cnt++; } } printf("%d\n",cnt); } } }