CCF 201412-4
思路是Kruskal算法,简单易懂,不好意思没写注释。
#include<stdio.h>
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int path_num,node_num;
int fa[1010];
struct Path{
int from,des;
int val;
}p[100010];
bool cmp(Path p1,Path p2){
return p1.val<p2.val;
}
int father(int x){
if(fa[x]==x){
return x;
}else{
fa[x]=father(fa[x]);
return fa[x];
}
}
int main(){
for(int i=0;i<1010;i++) fa[i]=i;
cin >> node_num >> path_num;
for(int i=0;i<path_num;i++){
cin >> p[i].from >> p[i].des >> p[i].val;
}
sort(p,p+path_num,cmp);
for(int i=0;i<path_num;i++){
// cout << p[i].from << ' ' << p[i].des << ' ' << p[i].val << endl;
}
int ans=0;
for(int i=0;i<path_num;i++){
// cout << father(p[i].des) << ' ' << father(p[i].from) << endl;
if(father(p[i].des)!=father(p[i].from)){
ans+=p[i].val;
fa[fa[p[i].des]]=fa[p[i].from];
// cout << father(p[i].des) << ' ' << father(p[i].from) << endl;
}
}
cout << ans;
return 0;
}