➤ Problem Link : BLINNET
👉 Hint : edit please
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; struct node { int a,b,wt; }; typedef struct node NODE; int par[10001]; int size[10001]; vector<NODE>v; bool comp(NODE a,NODE b) { return a.wt<=b.wt; } int find(int a) { if(par[a]==a) return a; return par[a]=find(par[a]); } bool uni(int a,int b) { int p1=find(a); int p2=find(b); if(p1==p2) return false; if(size[p1]>size[p2]) { par[p2]=p1; size[p1]+=size[p2]; } else { par[p1]=p2; size[p2]+=size[p1]; } // par[p2]=p1; return true; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; long long int ans; cin>>t; while(t--) { ans=0; v.clear(); int n,x,w; cin>>n; string s; NODE edge; for(int i=1;i<=n;i++) { par[i]=i; size[i]=1; } for(int i=1;i<=n;i++) { cin>>s; int k; cin>>k; for(int j=1;j<=k;j++) { cin>>x>>w; if(x<i) continue; edge.a=i; edge.b=x; edge.wt=w; v.push_back(edge); } } sort(v.begin(),v.end(),comp); int st,end,k=0; for(int i=0;i<v.size();i++) { if(k==n-1) break; st=v[i].a; end=v[i].b; w=v[i].wt; if(uni(st,end)) { ans+=w; k++; } } cout<<ans<<endl; } }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!