#include using namespace std; struct edge{ int a,b,w; }; vector e; bool fff(edge p, edge q){ return p.w v[100001]; int findPar(int k){ if(par[k]==k) return k; return par[k]=findPar(par[k]); } void join(int p, int q){ p=findPar(p); q=findPar(q); if(sz[p] out[100001]; void calc(int k){ if(v[k].size()==1 && k!=root){ out[f].push_back(k); f++; if(f>n>>m; for(i=1;i<=n;i++) cin>>val[i]; //sort(val+1,val+1+n); for(i=0;i>p>>q; e.push_back({p,q,(val[p]-val[q])*(val[p]-val[q])}); } sort(e.begin(),e.end(),fff); for(i=1;i<=n;i++) par[i]=i; for(i=1;i<=n;i++) sz[i]=1; i=-1; int br=0; while(br