• 扩展并查集——POJ


    题目含义

    找出与之前的话不符的假话的数目

    题目分析

    简单的扩展并查集

    题目代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    const int maxn=5e4+7;
    int f[maxn*3];
    int n,k,d,x,y;
    int get(int x){
        if(f[x]==x)return x;
        else return f[x]=get(f[x]);
    }
    int main(){
        scanf("%d%d",&n,&k);
        int ans=0;
        for(int i=1;i<=n;i++)
            f[i]=i;
        for(int i=0;i<k;i++){
            scanf("%d%d%d",&d,&x,&y);
            if(x>n||y>n){
                ans++;
                continue;
            }
            int fx_sel=get(x),fx_eat=get(x+n),fx_ene=get(x+n+n);
            int fy_sel=get(y),fy_eat=get(y+n),fy_ene=get(y+n+n);
            if(d==1){
                if(fx_sel==fy_eat||fx_sel==fy_ene){
                    ans++;
                    continue;
                }
                f[fy_sel]=fx_sel;
                f[fy_eat]=fx_eat;
                f[fy_ene]=fx_ene;
            }
            else if(d==2){
                if(fx_sel==fy_sel||fx_sel==fy_eat||x==y){
                    ans++;
                    continue;
                }
                f[fy_sel]=fx_eat;
                f[fy_ene]=fx_sel;
                f[fy_eat]=fx_ene;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    Asp.Net 获取客户端真实IP方法总结
    C# 中英文符号互转(半角全角互转)
    执行git commit命令提示: “Please tell me who you are”的解决方案
    Tools
    VSC
    DevOps
    VSC
    DevOps
    DevOps
    K8S
  • 原文地址:https://www.cnblogs.com/helman/p/11233921.html
Copyright © 2020-2023  润新知