求助最小生成树P3366
  • 板块学术版
  • 楼主North_encounter
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/22 10:40
  • 上次更新2023/11/3 02:03:27
查看原帖
求助最小生成树P3366
850632
North_encounter楼主2023/8/22 10:40

题面

一直44pts

#include<bits/stdc++.h>
using namespace std;
int fa[1000001];
int n,q;
int ans;
struct student {
	int u,v,w;
} m[1140514];
int cnt=0;
inline void chu() {
	for(int i=1; i<=n; i++) {
		fa[i]=i;
	}
}
inline int find(int k) {
	if(fa[k]==k) return k;
	return fa[k]=find(fa[k]);
}
inline bool cmp(student a,student b) {
	return a.w<b.w;
}
inline void kruskal() {
	sort(m+1,m+q+1,cmp);
	for(int i=1; i<=q; i++) {
		if(find(m[i].u)==find(m[i].v)) continue;
		ans+=m[i].w;
		fa[m[i].v]=fa[m[i].u];
		if(++cnt>=n-1) {
			return;
		}
	}
	if(cnt<n-1) {
		ans=-1;
	}
	return;
}
int main() {
	cin>>n>>q;
	for(int i=1; i<=q; i++) {
		cin>>m[i].u>>m[i].v>>m[i].w;
	}
	chu();
	kruskal();
	if(ans==-1){
		cout<<"orz";
	}
	else {
	cout<<ans;
	}

return 0;
}
2023/8/22 10:40
加载中...