本题设及最小生成树,不会的同学可以去学一下
import java.util.*;
public class Main {
public static int[] fa;
static class link {
int x, y, l;
link(int a, int b, int c) {
x = a;
y = b;
l = c;
}
}
public static int find(int a) {
if (fa[a] == a) {
return a;
} else {
return fa[a] = find(fa[a]);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int sum = 0, count = 0;//sum表示连接的花费数 count表示最小个数
fa = new int[n+1];
for(int i=1;i<=n;i++){
fa[i]=i;
}
link[] arr = new link[m];
for (int i = 0; i < m; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
arr[i] = new link(a, b, c);
}
Arrays.sort(arr, (a1, a2) -> {
return a1.l - a2.l;
});
for(int i=0;i<m;i++){
if(find(arr[i].x)!=find(arr[i].y)){
fa[find(arr[i].x)]=find(arr[i].y);
sum+=arr[i].l;
count++;
}
if(count>=n-k)
break;
}
if(count>=n-k){
System.out.print(sum);
}else{
System.out.print("No Answer");
}
}
}