腾讯9.6客户端第二题

并查集 只A了20, 不知道问题在哪儿, 大佬们给看看
package others;

import java.util.Scanner;

/**
 * @author admin_cg
 * @date 2020/9/6 20:34
 */
public class tencent0906 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        unionFind uf = new unionFind(n);
        for (int i = 0; i < m; i++) {
            int t = sc.nextInt();
            int pre = 0;
            for (int j = 0; j < t; j++) {
                if(j == 0) {
                    pre = sc.nextInt();
                    continue;
                }
                uf.union(pre, sc.nextInt()); // 每个团体第一个合并
            }
        }
        System.out.println(uf.findZero(n));
    }
}

class unionFind{
    int[] parent;

    public unionFind(int num) {
        this.parent = new int[num];
        for (int i = 0; i < num; i++) {
            parent[i] = i; // 每个人初始化为自己
        }
    }
    public int find (int x){
        while (parent[x] != x){
            parent[x] = parent[parent[x]]; // 压缩查找
            x = parent[x];
        }
        return x;
    }
    public void union(int p, int q){
        int rootp = find(p);
        int rootq = find(q);
        if(rootp == rootq) return; // 连通不用合并
        if(rootp < rootq)
            parent[rootq] = rootp; // 小的为根, 保证合并到0下
        else parent[rootp] = rootq;
    }
    public int findZero (int num){
        int sum = 0;
        for (int i = 0; i < num; i++) {
            if(find(i) == 0)
                sum++;  // 寻找根为0的人
        }
        return sum;
    }
}

#笔试题目##腾讯#
全部评论
序号是0-n,题目有问题,并查集大小n+1
点赞 回复 分享
发布于 2020-09-07 13:55

相关推荐

不愿透露姓名的神秘牛友
01-20 15:00
24届毕业生,&nbsp;计算机专业,因为公司强制安排去了人力,氛围不好,没人教我,又一堆活要给我,领导和稀泥,做不完的表格,每天都笑不出来,真的感觉要崩溃了,想离职,但是还没找到下家,上班的意义到底是什么呢?
在思考的熊熊很讨厌吃香菜:不舒服的环境,工作下去也只是对身心不益。我们肯定是有得选的,不要放弃。我也是24届,已经找到第三份java的工作了,26号入职领电脑,薪资还整整增加了50%。
点赞 评论 收藏
分享
2024-12-11 11:40
海南大学 Java
点赞 评论 收藏
分享
无敌战神大菜鸡:计算机来卷嵌入式?疯啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务