10wa
查看原帖
10wa
780505
x1489631649楼主2024/6/19 21:14
#include<bits/stdc++.h>
using namespace std;
struct node{
	int u,v,w;
}q[100005];
int fa[100005],t[100005];
bool cmp(node x,node y)
{
	return x.w<y.w;
}
int find(int x)
{
	if(fa[x]==x)
		return x;
	else return fa[x]=find(fa[x]);
}
void join(int x,int y)
{
	fa[find(x)]=find(y);
}
int main()
{
	int n,p,s=0,ans=1e9;
	cin>>n>>p;
	for(int i=1;i<=n;i++)
		fa[i]=i;
	for(int i=1;i<=n;i++)
	{
		cin>>t[i];
		ans=min(ans,t[i]);
	}
	for(int i=1;i<=p;i++)
	{
		cin>>q[i].u>>q[i].v>>q[i].w;
		q[i].w=q[i].w*2+t[q[i].u]+t[q[i].v];
	}
	sort(q+1,q+p+1,cmp);
	for(int i=1;i<=p;i++)
		cout<<q[i].u<<" "<<q[i].v<<" "<<q[i].w<<endl;
	for(int i=1;i<=p;i++)
	{
		if(find(q[i].u)!=find(q[i].v))
		{
			s++;
			join(q[i].u,q[i].v);
			ans+=q[i].w; 
		}
		if(s==n-1)
			break;
	}
	cout<<ans;
	return 0;
}
2024/6/19 21:14
加载中...