Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)

   日期:2020-05-03     浏览:96    评论:0    
核心提示:试题 算法训练 连通分块资源限制时间限制:200ms 内存限制:8.0MB问题描述  连通分块输java

试题 算法训练 连通分块

资源限制
时间限制:200ms 内存限制:8.0MB

问题描述
  连通分块
输入格式
  输入的第一行包含两个整数n, m
  n代表图中的点的个数,m代表边的个数
  接下来m行,每行2个正整数,表示图中连通的两点。
输出格式
  输出1行,与1连通的点的集合,并按升序排列输出。
样例输入
6 3
1 2
2 3
3 4
样例输出
1 2 3 4
数据规模和约定
  n<=10000,m<=100000

package 蓝桥杯官网;

import java.util.Scanner;

public class 连通分块 {

    //https://blog.csdn.net/a1439775520/article/details/90746562 欢迎进入讨论群
    public static int[] f;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        f = new int[n + 1];
        int x, y;
        for (int i = 1; i <= n; i++) {
            f[i] = i;
        }
        for (int i = 0; i < m; i++) {
            x = sc.nextInt();
            y = sc.nextInt();
            setinfo(x, y);
        }
        for (int i = 1; i <= n; i++) {
            if (f[i] == 1) System.out.print(i + " ");
        }

    }

    public static void setinfo(int a, int b) {
        int fa = find(a);
        int fb = find(b);
        if (fa > fb) {
            f[fa] = fb;
        } else {
            f[fb] = fa;
        }
    }

    public static int find(int num) {
        if (num != f[num]) {
            int temp = find(f[num]);
            f[num] = temp;
        }
        return f[num];
    }
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服