社区讨论
kruskal 84 pts WA on case 13 玄关
P3366【模板】最小生成树参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhizp3o8
- 此快照首次捕获于
- 2025/11/03 18:20 4 个月前
- 此快照最后确认于
- 2025/11/03 18:20 4 个月前
马蜂良好
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
class DSU{
private:
static const int MAXN=1e7;
static int fa[MAXN];
public:
int find(int x){
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void merge(int x,int y){
fa[x]=y;
}
void init(int n){
for(int i=1;i<=n;i++) fa[i]=i;
}
};
int DSU::fa[DSU::MAXN];
namespace kruskal{
DSU dsu;
const int MAXN=5002,MAXM=2e5+2;
struct E{
int u,v,w;
}edge[MAXM];
int n,m,k=0,ans=0;
void init(){
cin >>n >>m;
dsu.init(n);
for(int i=1;i<=m;i++) cin >>edge[i].u >>edge[i].v >>edge[i].w;
sort(edge+1,edge+m+1,[](E &i,E &j){
return i.w<j.w;
});
}
void kruskall(){
for(int i=1;i<=m;i++){
int eu=dsu.find(edge[i].u),ev=dsu.find(edge[i].v);
if(eu!=ev){
dsu.merge(eu,ev);
ans+=edge[i].w;
k++;
if(k==n-1){
cout <<ans <<endl;
return ;
}
}
}
}
}
using namespace kruskal;
signed main(){
cin.tie(0)->sync_with_stdio(false);
init();
kruskall();
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...