基本复制,这些题目也没声好说的,没什么太大的技巧。主要是运用基本算法。
#include<stdio.h>
#include<iostream>
#include<memory.h>
#include<algorithm>
using namespace std;
const int MAX_N =100001;
struct node
{
int s,t,d;
}R[MAX_N];
int N;
int M;
long long ans=0;
int T[MAX_N];
int cmp(const node a,const node b)
{
if (a.d<b.d) return 1;
else return 0;
}
int init()
{
scanf("%d %d",&N,&M);
int i;
for (i=1;i<=M;i++)
scanf("%d %d %d",&R[i].s,&R[i].t,&R[i].d);
sort(R+1,R+M+1,cmp);
memset(T,-1,sizeof(T));
}
int findR(int t)
{
if (T[t]==-1) return t;
else return T[t]=findR(T[t]);
}
int work()
{
int l=0;
int i=1;
while(i<=M&&l<N-1)
{
int x=findR(R[i].s);
int y=findR(R[i].t);
if(x!=y)
{
l++;
ans+=R[i].d;
T[x]=y;
}
i++;
}
}
int put()
{
cout<<ans;
}
int main()
{
init();
work();
put();
return 0;
}