# DSU problem

I HAVE USE DISJOINT SET TO SOLVE THIS PROBLEM BUT I AM GETTING WA CAN ANY ONE HELP WHATS WRONG WITH MY SOLUTION. THE CODE IS LOOKING BIG BUT IS NORMAL DSU SO CAN U PLZZ LOOK ONCE

i have stored pair of parent node and weight in ‘mp’ and the i have added things with same weight in ‘mp’ to get the ans

``````ll n,m;
cin>>n>>m;

vector<tuple<ll,ll,ll>> edge(n-1);// wt ,u,v
for(auto &x:edge){
cin>>get<1>(x);
cin>>get<2>(x);
cin>>get<0>(x);
get<1>(x)--;
get<2>(x)--;
}

sort(edge.begin(),edge.end());

vector<ll> size(n);
for(int i=0;i<n;i++){
size[i]=1;
}

map<pair<ll,ll>,ll> mp;
for(auto x:edge){
ll n1=get<1>(x);
ll n2=get<2>(x);

}
}

if(n1!=n2){
if(size[n1]<size[n2]){
size[n2]+=size[n1];
mp[{n2,get<0>(x)}]=(size[n2]*(size[n2]-1))/2;

}else{
size[n1]+=size[n2];
mp[{n1,get<0>(x)}]=(size[n1]*(size[n1]-1))/2;
}
}
}

map<ll,ll> tmp;
for(auto x:mp){
tmp[x.first.second]+=x.second;
}

vector<ll> weight;
for(auto x:edge){
weight.push_back(get<0>(x));
}

for(int i=0;i<m;i++){
ll w;
cin>>w;
auto tt=upper_bound(weight.begin(),weight.end(),w);
if(tt==weight.begin()) cout<<0<<" "<<flush;
else{
ll t=tt-weight.begin();
t--;
cout<<tmp[weight[t]]<<" "<<flush;
}
}
cout<<endl;
``````