洛谷 P1547 Out of Hay kruskal 最小生成树 并查集 稀疏图

 题目链接:https://www.luogu.org/problemnew/show/P1547

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;

    public class Main{
        static int n;
        static int m;
        static int[]parent;
        static int[]rank;
        static int a,b,c;
        public static void init() {
        	for(int i=1;i<=n;i++) {
        		parent[i]=-1;
        		rank[i]=0;
        	}
        }
        public static int find_root(int x) {
        	int x_root=x;
        	while(parent[x_root]!=-1) {
        		x_root=parent[x_root];
        	}
        	return x_root;
        }
        public static int union(int x,int y) {
        	int x_root=find_root(x);
        	int y_root=find_root(y);
        	if(x_root==y_root)return 0;
        	else {
        		if(rank[x_root]>rank[y_root]) {
        			parent[y_root]=x_root;
        		}
        		else if(rank[x_root]<rank[y_root]) {
        			parent[x_root]=y_root;
        		}
        		else {
        			parent[x_root]=y_root;
        			rank[y_root]++;
        		}
        		return 1;
        	}
        }
        public static void main(String[] args) {
            Scanner in=new Scanner(System.in);
            n=in.nextInt();
            m=in.nextInt();
            parent=new int[n+1];
            rank=new int[n+1];
            init();
            List<xi>list=new ArrayList<xi>();
            for(int i=0;i<m;i++) {
            	list.add(new xi(in.nextInt(),in.nextInt(),in.nextInt()));
            }
            Collections.sort(list);
            int k=0;
            int loc=0;
            for(int i=0;i<m;i++) {
            	if(k==n-1)break;
            	if(union(list.get(i).f,list.get(i).t)==1) {
            		k++;
            		loc=list.get(i).quan;
            	}
            }
            System.out.println(loc);
        }

    }
    class xi implements java.lang.Comparable<xi>{
        int f;
        int t;
        int quan;
        public int compareTo(xi o) {
            return this.quan-o.quan;
        }
        
        public xi(int f, int t, int quan) {
            super();
            this.f = f;
            this.t = t;
            this.quan = quan;
        }
        
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值