这是一个模板题
唯一的要求就是,不能连通的话,让输出orz
package info.frady.luogu;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class P3366 {
static int[] set;
static int N;
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(reader.readLine());
N=Integer.parseInt(st.nextToken());// N 个结点和 M 条无向边
set=new int[N+1];
int M=Integer.parseInt(st.nextToken());//M 条无向边
PriorityQueue<Edge3366> pq=new PriorityQueue<Edge3366>();
init();
for (int i = 0; i <M ; i++) {
st=new StringTokenizer(reader.readLine());
int start=Integer.parseInt(st.nextToken());
int end=Integer.parseInt(st.nextToken());
int dis=Integer.parseInt(st.nextToken());
pq.add(new Edge3366(start,end,dis));
}
int sum=0;
int cout=0;
while(!pq.isEmpty()){
Edge3366 e=pq.poll();
if(!connected(e.start,e.end)){
union(e.start,e.end);
sum=sum+e.dis;
cout++;
}
}
if(cout+1<N){
System.out.println("orz");
}else{
System.out.println(sum);
}
reader.close();
}
public static void init(){
for (int i = 0; i <set.length; i++) {
set[i]=i;
}
}
public static void union(int a,int b){
int A=find(a);
int B=find(b);
if(A!=B){
set[A]=B;
}
}
public static int find(int a){
if(set[a]==a){
return set[a];
}
return set[a]=find(set[a]);
}
public static boolean connected(int a,int b){
int A=find(a);
int B=find(b);
return A==B;
}
}
class Edge3366 implements Comparable<Edge3366>{
int start;
int end;
int dis;
public Edge3366(int start, int end, int dis) {
this.start = start;
this.end = end;
this.dis = dis;
}
@Override
public int compareTo(Edge3366 o) {
return this.dis-o.dis;
}
}