//最小生成树
//输入边 定义边节点
//kruskal算法
//map 的struct需要定义< 符号 ,那么set也应该是这样但是数组可以不用
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
int num;//边数
struct Node{
int r,l,e;
bool operator < (const Node& rhs) const{
return e<rhs.e;
}
}node[maxn];
int ufs[maxn];
int ans=0;
int find(int u){
return ufs[u]==u? u:ufs[u]=find(ufs[u]);
}
void Kruskal(){
sort(node,node+num);
for(int i=0;i<maxn;i++)ufs[i]=i;//自连通
for(int i=0;i<num;i++){
int x=find(node[i].l);
int y=find(node[i].r);
if(x!=y){
ans+=node[i].e;
printf("edge start with %d,end with %d, length %d\n",node[i].l,node[i].r,node[i].e);
ufs[x]=y;
}
}
}
int main(){
//输入树节点,起点,终点,边权
cout<<"input the num of the edge of the tree:\n";
cin>>num;
cout<<"for the next n lines input as a-the begin b-the end e-the length:\n";
for(int i=0;i<num;i++){
cin>>node[i].l>>node[i].r>>node[i].e;
}
//kruskal算法求最小生成树并打印最小生成树
Kruskal();
printf("The smallest:%d",ans);
return 0;
}
//输入边 定义边节点
//kruskal算法
//map 的struct需要定义< 符号 ,那么set也应该是这样但是数组可以不用
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
int num;//边数
struct Node{
int r,l,e;
bool operator < (const Node& rhs) const{
return e<rhs.e;
}
}node[maxn];
int ufs[maxn];
int ans=0;
int find(int u){
return ufs[u]==u? u:ufs[u]=find(ufs[u]);
}
void Kruskal(){
sort(node,node+num);
for(int i=0;i<maxn;i++)ufs[i]=i;//自连通
for(int i=0;i<num;i++){
int x=find(node[i].l);
int y=find(node[i].r);
if(x!=y){
ans+=node[i].e;
printf("edge start with %d,end with %d, length %d\n",node[i].l,node[i].r,node[i].e);
ufs[x]=y;
}
}
}
int main(){
//输入树节点,起点,终点,边权
cout<<"input the num of the edge of the tree:\n";
cin>>num;
cout<<"for the next n lines input as a-the begin b-the end e-the length:\n";
for(int i=0;i<num;i++){
cin>>node[i].l>>node[i].r>>node[i].e;
}
//kruskal算法求最小生成树并打印最小生成树
Kruskal();
printf("The smallest:%d",ans);
return 0;
}