(洛谷 3367)【模(mú)板】并查集

本文介绍了一种基于Kruskal算法的实现模板,通过解决洛谷3366问题的具体实例来展示算法的工作原理。文章提供了完整的代码示例,并解释了如何使用并查集进行边的合并与查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析

其实就是洛谷3366降低了点层次
kruskal模板


代码

#include <cstdio>
using namespace std;
int fat[10001],n,m;
int father(int x){
    if (fat[x]==x) return x;
    else return fat[x]=father(fat[x]);
}
bool un(bool z,int x,int y){
    int fa=father(x);//祖先
    int fb=father(y);//祖先
    if (fa!=fb){
        if (z) fat[fb]=fa;//合并祖先
        return 0;
    } return 1;
}
int main(){
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) fat[i]=i;
    for (int i=1;i<=m;i++){
        int z,x,y;
        scanf("%d%d%d",&z,&x,&y);
        if (z==1) un(1,x,y);
        else if (un(0,x,y)) putchar('Y');
        else putchar('N');
        if (z==2)putchar('\n');
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值