4RE1WA求助QAQ
查看原帖
4RE1WA求助QAQ
958865
aldzsfs楼主2023/7/7 21:28
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w,k,h[200000],f[200000];
struct edge{int u,v,w;}g[3000000];
pair<int,long long>p[200000];
void add(int a,int b,int c){
	if(a!=b)	g[++k]=(edge){max(h[u],h[v]),min(h[u],h[v]),w};
	else	g[++k]=(edge){u,v,w},g[++k]=(edge){v,u,w};
}
bool cmp(edge a,edge b){return a.w<b.w;}
int find(int a){return a==f[a]?a:f[a]=find(f[a]);}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	f[i]=i,p[i].first=1;
	for(int i=1;i<=n;i++)	scanf("%d",&h[i]);
	while(m--)	scanf("%d%d%d",&u,&v,&w),add(u,v,w);
	sort(g+1,g+1+k,cmp);
	for(int i=1;i<=k;i++){
		int a=find(g[i].u),b=find(g[i].v);
		if(a==b)	continue;
		f[a]=b;
		p[b].first+=p[a].first;
		p[b].second+=p[a].second+g[i].w;
	}
	sort(p+1,p+1+n);
	return cout<<p[n].first<<' '<<p[n].second,0;
}
2023/7/7 21:28
加载中...