本题为板子题,就是有n个节点,m条边,把所有节点连接生成最小生成树。
本人魔改代码:
#include <iostream>
#include <cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
//%拜大神Orz只求AC
//题目背景:cheems正在用dream来教化爱坤军团时,突然傍边有人生事,赫哥和华强干起来了。。。。。。
int m,n;
int gua=0;//华强劈都劈了,瓜不能浪费了,两块钱一斤,比较值钱,但是带走之前先统计一共劈了多少次。
struct Orz{
int bro1,bro2,power;
}cheems[200005];//cheems军团
int ikun[10001];//爱坤军团
int dream(int i)
{
if(ikun[i]==i) return i;
else
{
return ikun[i]=dream(ikun[i]);
}
}
bool pigua(Orz hege,Orz huaqiang)
{
return hege.power<huaqiang.power;
}
int read()
{
int x=0,f=1;char c;
c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while('0'<=c&&c<='9')
{
x*=10;x=x+c-48;c=getchar();
}
return x*f;
}
signed main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
cheems[i].bro1=read(),cheems[i].bro2=read(),cheems[i].power=read();
}
for(int i=1;i<=n;i++) ikun[i]=i;//爱坤出现
sort(cheems+1,cheems+m+1,pigua);//劈瓜开始
for(int i=1;i<=m;i++)
{
int our_power=dream(cheems[i].bro1);
int enemys_power=dream(cheems[i].bro2);
if(our_power!=enemys_power)
{
ikun[our_power]=enemys_power;
gua+=cheems[i].power;
n--;
}
if(n==1) {cout<<gua;return 0;}
}
cout<<"orz";
return 0;
return 0;
}