题出自洛谷p3366最小生成树
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
inline int read()
{
int p,data=0;
char ch=0;
while((ch!='-')&&ch<'0'||ch>'9') ch=getchar();
if(ch=='-')
{
p=-1;
ch=getchar();
}
else p=1;
while(ch<='9'&&ch>='0')
{
data=data*10+ch-'0';
ch=getchar();
}
return data*p;
}
int n,m;
struct gty
{
int a,b,c;
}gtyy[210000];
int cmp(gty x,gty y)
{
return x.c<y.c;
}
int pre[5100];
int k=0;
int tot=0;
int find(int z)
{
if(pre[z]==z) return z;
pre[z]=find(pre[z]);
return pre[z];
}
int main()
{
n=read();
m=read();
for(int i=1;i<=m;i++)
{
gtyy[i].a=read();
gtyy[i].b=read();
gtyy[i].c=read();
// pre[i]=i;
}
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
sort(gtyy+1,gtyy+m+1,cmp);
for(int i=1;i<=m;i++)
{
if(k==n-1)
{
printf("%d",tot);
return 0;
}
else
{
if(find(gtyy[i].a)!=find(gtyy[i].b))
{
pre[find(gtyy[i].a)]=find(gtyy[i].b);
tot+=gtyy[i].c;
k++;
}
}
}
printf("orz");
return 0;
}