如果没有特价边的话,就是 ai最小的点与其他所有点相连,现在加上这些特价边的话 ,跑最小生成树即可
int n,m,f[MX];
ll a[MX];
vector<pair<ll,pair<int,int> > >mp;
int find (int x){return x==f[x]?x:f[x]=find(f[x]);}
inline void solve()
{
cin>>n>>m;
rpp(i,n) f[i]=i;
ll mn=1e12+10;
int tag=1;
rpp(i,n)
{
cin>>a[i];
if(a[i]<mn) mn=a[i],tag=i;
}
rpp(i,n)
{
if(i==tag) continue;
mp.push_back(make_pair(a[i]+mn,make_pair(tag,i)));
}
rpp(i,m)
{
int x,y;ll w;cin>>x>>y>>w;
mp.push_back(make_pair(w,make_pair(x,y)));
}
sort(all(mp));
ll ans=0;
for(auto x:mp)
{
int fx=find(x.second.first),fy=find(x.second.second);
if(fx!=fy) ans+=x.first,f[fy]=fx;
}
cout<<ans<<endl;
}