并查集 将集合在逻辑上表示为树结构。

void Initial() {
    for(int i=0; i<n; i++) {
        father[i]=i;
        height[i]=0;
    }
    return ;
}

int Find(int x) {                                                                        //路径压缩
    if(x!=father[x]) {
        father[x]=Find(father[x]);
    }
    return father[x];
}

void Union(int x,int y) {                                                           //合并集合
    x=Find(x);
    y=Find(y);
    if(x!=y) {
        if(height[x]>height[y]) {
            father[y]=x;
        } else if(height[x]<height[y]) {
            father[x]=y;
        } else {
            father[y]=x;
            height[x]++;
        }
    }
    return ;                                                                        //防止成环
}



只能判断是否为连通图,或用来求图的连通分量的个数。
不能认为只有一个连通分量其一定就为树。
树是有向的。 连通分量无向!!
其可能有多个根结点。
全部评论
bool Istree() { bool f=1; int component=0; int root=0; for(int i=0; i<Max; i++) { if(!visit[i]) { continue; } if(i==father[i]) { component++; } if(Indegree[i]==0) { root++; } else if(Indegree[i]>1) { f=0; } } if(component!=1||root!=1) { f=0; } if(component==0&&root==0) { f=1; } return f; } 判断为树,一个根结点,度为0,其余结点度为1,各个结点同属一个集合!!!
点赞 回复 分享
发布于 2022-10-13 20:26 福建

相关推荐

10-27 02:29
已编辑
门头沟学院 嵌入式工程师
牛客72783561...:简历不是这么写的,你这两个项目只说了用到了什么技术,却没说取得了什么成果,在我看来这就是你自己做的一个demo,没有价值。你为什么不写你电赛国二的那个项目?
点赞 评论 收藏
分享
11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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