爆0?
查看原帖
爆0?
286881
yy2111楼主2020/12/4 11:54
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,m,cw[N],fa[N],ans=2147483647,k,cnt;
struct ys{
	int a,b,ds;
}aa[N*2];
#define Int register int

inline int in(){
	int s=0,w=1;
	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch)){s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}
	return w*s;
}

bool mcmp(ys x,ys y){
	return x.ds<y.ds;
}

int fd(Int x){
	//if(fa[x]!=x)fa[x]=fd(fa[x]);
	//return x;
	if(fa[x]==x)return x;
	return fa[x]=fd(fa[x]);
}

void he(Int x,Int y){
	Int fx=fd(x),fy=fd(y);
	if(fx!=fy) fa[fx]=fy;
}

int main(){
	freopen("P2916_1.in","r",stdin);
	freopen("P2916.out","w",stdout);
	n=in();m=in();
	for(Int i=1;i<=n;i++)cw[i]=in(),fa[i]=i,ans=min(ans,cw[i]);
	for(Int i=1;i<=m;i++){
		aa[++k].a=in();aa[k].b=in();aa[k].ds=in();
		aa[k].ds=(aa[k].ds<<1)+cw[aa[k].a]+cw[aa[k].b];
		aa[++k].a=aa[k-1].b;aa[k].b=aa[k-1].a;aa[k].ds=aa[k-1].ds;
	}
	sort(aa+1,aa+k+1,mcmp);
	for(Int i=1;i<=k;i++){
		Int u=aa[i].a,v=aa[i].b;
		if(fd(u)!=fd(v)){
			he(u,v);ans+=aa[i].ds;cnt++;
		}
		if(cnt==(n-1))break;
	}
	printf("%d\n",ans);
	return 0;
}
2020/12/4 11:54
加载中...