社交集群(pta) (并查集) Java语言

简介: 社交集群(pta) (并查集) Java语言

题目描述:

当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。

输入格式:

输入在第一行给出一个正整数 N(≤1000),为社交网络平台注册的所有用户的人数。于是这些人从 1 到 N 编号。随后 N 行,每行按以下格式给出一个人的兴趣爱好列表:

[j]是第j个兴趣爱好的编号,为区间 [1, 1000] 内的整数。

输出格式:

首先在一行中输出不同的社交集群的个数。随后第二行按非增序输出每个集群中的人数。数字间以一个空格分隔,行末不得有多余空格。

输入样例:

8
3: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4

输出样例:

3
4 3 1


解题思路:

核心思路是并查集,再用两个数组分别存放某一个人的其中一个爱好、每个集群的人数

*注:*并查集参考部落(pta)(并查集) Java以及C++

代码:

package text2;

import java.util.Arrays;
import java.util.Scanner;

public class 社交集群 {
  static int p[] = new int[1005];
  static int arr[] = new int[1005]; // 记录某人的一个爱好,用于代表该人
  static int count[] = new int[1005];// 每个集合所有人数的数量
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    for(int i=0;i<1005;i++)
      p[i] = i;
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    scanner.nextLine();
    for(int i=0;i<n;i++) {
      String s[] = scanner.nextLine().replace(":","").split(" ");
      int m = Integer.parseInt(s[0]);
      arr[i] = Integer.parseInt(s[1]);//用第一个兴趣代表该人
      for(int j=1;j<m;j++) {
        int a = Integer.parseInt(s[j]);
        int b = Integer.parseInt(s[j+1]);
        Union(a, b);
      }
    }
    for(int i=0;i<n;i++) {//找集合个数
      int p = Find(arr[i]);
      count[p]++;
    }
    Arrays.sort(count);
    int s= 0;
    for(int i=0;i<1005;i++)
      if(count[i]!=0) s++;
    System.out.println(s);
    int nu = count.length;
    System.out.print(count[nu-1]);
    for(int i=1;i<s;i++)
      System.out.print(" "+count[nu-i-1]);
  }
  public static int Find(int a) {
    if(a!=p[a])
      return Find(p[a]);
    return p[a];
  }
  public static void Union(int a,int b) {
    a = Find(a);
    b = Find(b);
    if(a!=b)
      p[a]=b;
  }

}

相关文章
|
29天前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
2月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
2月前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
41 3
|
1月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
2月前
|
算法 Java 编译器
透视Java语言的究极优化:探索性能的深度
在Java程序员的日常工作中,优化代码性能是一项至关重要的任务。然而,除了传统的性能调优方法外,本文将探讨一些更为深奥的技术,如JIT编译器的内部工作机制、GC算法的进阶应用以及多线程并发模型的优化策略。通过深入了解这些技术背后的原理和实现,我们可以更好地理解如何在Java平台上实现最高效的代码运行。 【7月更文挑战第11天】
63 4
|
3月前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
47 3
|
2月前
|
Java 大数据 API
Java语言的核心知识点与特性
Java 是一种广泛使用的编程语言,自 1995 年发布以来,它已经成为了企业级应用开发、移动应用开发、大数据处理和云计算等领域的主流技术。
34 0
|
2月前
|
设计模式 算法 Oracle
Java语言学习路径及学习资源推荐
Java语言学习路径及学习资源推荐
|
2月前
|
JavaScript 前端开发 Java
Java语言+前后端分离 数字化产科管理平台 产科电子病历系统源码
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
45 0
|
3月前
|
Java 大数据 API