克鲁斯卡尔改进

洛谷

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.*;
public class 克鲁斯卡尔 {
    static class Node{
        public int from;
        public int to;
        public int weight;
    }
    static Node[] edges;
    static int[] parent;
    static int n,m;
    private static int find(int x){
        return x==parent[x]?x:find(parent[x]);
    }
    private static void union(int x,int y){
        int fx=find(x);
        int fy=find(y);
        parent[fx]=fy;
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer st=new StreamTokenizer(br);
        st.nextToken();n=(int)st.nval;
        st.nextToken();m=(int)st.nval;
        parent=new int[n+1];
        for(int i=1;i<=n;i++){
            parent[i]=i;
        }
        edges=new Node[m];
        for(int i=0;i<m;i++){
            edges[i]=new Node();
        }
        for(int i=0;i<m;i++){
            st.nextToken();int from=(int)st.nval;
            st.nextToken();int to=(int)st.nval;
            st.nextToken();int weight=(int)st.nval;
            edges[i].from=from;
            edges[i].to=to;
            edges[i].weight=weight;
        }
        Arrays.sort(edges,(a, b)->a.weight-b.weight);
        int num=0;
        int sum=0;
        for(int i=0;i<m;i++){
            int from=edges[i].from;
            int to=edges[i].to;
            int weight=edges[i].weight;
            if(find(from)!=find(to)){
                sum+=weight;
                union(from,to);
                num++;
            }
            if(num==n-1){
                break;
            }
        }
        if(num!=n-1){
            System.out.println("orz");
        }
        System.out.println(sum);
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务