Prim
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
typedef pair<int,int> PII;
const int N=1e4+514,M=2e5+191,INF=0x7f7f7f7f7f7f7f7f;
int n,m,ans=0;
struct Edge{
int val=0,to=0,nex=0;
}edge[5*M];
int head[N],cnt;
void add_edge(int a,int to_b,int val){
edge[++cnt].nex=head[a];
edge[cnt].val=val;
edge[cnt].to=to_b;
head[a]=cnt;
}
int dis[N]={};
int prim(){
int anst=0;
memset(dis,0x7f,sizeof(dis));
priority_queue<PII,vector<PII>,greater<PII> >pq;
bool vis[N]={};
pq.push(make_pair(0,1));
while(!pq.empty()){
if(!pq.empty())if(vis[pq.top().second]){
pq.pop();
continue;
}
anst+=pq.top().first;
int pos=pq.top().second;
vis[pos]=1;
pq.pop();
for(int i=head[pos];i;i=edge[i].nex){
int to=edge[i].to;
int val=edge[i].val;
if(!vis[to]&&dis[to]>val){
dis[to]=val;
pq.push(make_pair(val,to));
}
}
}
return anst;
}
signed main(){
IOS
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add_edge(x,y,z);
add_edge(y,x,z);
}
int ans=prim();
for(int i=2;i<=n;i++){
if(dis[i]==INF){
cout<<"orz"<<endl;
return 0;
}
}
cout<<ans<<endl;
return 0;
}
Kruskal
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
const int N=1e4+514,M=2e5+191,INF=0x7fffffff;
int n,m,ans=0;
struct Edge_in{
int x,y,val;
}in[M];
//////最小生成树
bool cmp1(Edge_in tmp1,Edge_in tmp2){
return tmp1.val<tmp2.val;
}
//并查集
int fa_un[N];
int find(int a){
if(fa_un[a]==a)return a;
return fa_un[a]=find(fa_un[a]);
}
void unionn(int x,int y){
int fx=find(x),fy=find(y);
if(fx!=fy)fa_un[fx]=fy;
}
void build_sptree(){
sort(in+1,in+1+m,cmp1);
for(int i=1;i<=n;i++)fa_un[i]=i;
for(int i=1;i<=m;i++){
int x=in[i].x,y=in[i].y,val=in[i].val;
if(find(x)!=find(y)){
unionn(x,y);
ans+=val;
}
}
return;
}
signed main(){
IOS
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>in[i].x>>in[i].y>>in[i].val;
}
build_sptree();
int fafafa=find(1);
for(int i=2;i<=n;i++){
if(find(i)!=fafafa){
cout<<"orz"<<endl;
return 0;
}
}
cout<<ans<<endl;
return 0;
}