Description

动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B吃 C,C 吃 A。

现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。

有人用两种说法对这 N 个动物所构成的食物链关系进行描述:

第一种说法是“1 X Y”,表示 X 和 Y 是同类。

第二种说法是“2 X Y”,表示 X 吃 Y 。

此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。

  • 当前的话与前面的某些真的话冲突,就是假话

  • 当前的话中 X 或 Y 比 N 大,就是假话

  • 当前的话表示 X 吃 X,就是假话

你的任务是根据给定的 N 和 K 句话,输出假话的总数。

Input&Output

Input

  • 第一行两个整数,N,K,表示有 N 个动物,K 句话。
  • 第二行开始每行一句话(按照题目要求)

Output

  • 一行,一个整数,表示假话的总数。

Sample

Input

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Output

3

Solution

  • 本题是经典的剩余系下带偏移量的并查集。我们需要表示三种状态:同类,吃,被吃,分别用0,1,2表示,因此在计算偏移量时需要MOD 3。此外,在合并树时,需要计算父节点到新根节点的距离,我们可以根据 (d[x]+d[fx]-d[y])%k=状态 来反解出距离。
  • 当两种动物在同一颗树中,而距离不符合输入时,证明是假话,计数器自增。
  • 代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 50005
    using namespace std;
    int p=3,n,k,q,a,b,res,f[maxn],d[maxn];
    inline int rd()
    {
    int x=0;char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x;
    }
    int find(int x)
    {
    if(x==f[x])return x;
    int root=find(f[x]);
    d[x]=(d[x]+d[f[x]])%p;
    return f[x]=root;
    }
    int lnk(int x,int y,int dis)
    {
    int fx=find(x),fy=find(y);
    if(fx!=fy){
        f[fx]=fy;
        d[fx]=(dis-d[x]+d[y]+p)%p;
        return 0;
    }
    else{
        if((d[x]-d[y]+p)%p!=dis)return -1;
    }
    }
    int main()
    {
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i)f[i]=i;
    for(int i=1;i<=k;++i){
        q=rd();
        if(q==1){
            a=rd();b=rd();
            if(a>n||b>n){res++;continue;}
            int tmp=lnk(a,b,0);
            if(tmp==-1)res++;
        }
        else if(q==2){
            a=rd();b=rd();
            if(a==b){res++;continue;}
            if(a>n||b>n){res++;continue;}
            int tmp=lnk(a,b,1);
            if(tmp==-1)res++;
        }
    }
    printf("%d",res);
    return 0;
    } 

[洛谷P2024/POJ1182]食物链 - 带偏移量的并查集(2)的更多相关文章

  1. 洛谷 P2024 [NOI2001]食物链——带权值的并查集维护

    先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C-> ...

  2. [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)

    Description 公元五八〇一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...

  3. bzoj 1202 [HNOI2005]狡猾的商人——带偏移量的并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 带偏移量的并查集. 注意先 find() 再调用 dis !!! 自己的对拍太水了. ...

  4. bzoj 3376 [Usaco2004 Open]Cube Stacking 方块游戏——带偏移量的并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3376 带偏移量的并查集. #include<iostream> #include ...

  5. 洛谷 P2024 [NOI2001]食物链 解题报告

    P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个 ...

  6. 洛谷 P2024 [NOI2001]食物链

    题意简述 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 1."1 X Y",表示 X 和 Y 是同类. 2."2 X Y",表示 X 吃 Y . ...

  7. 食物链(带权&种类并查集)

    食物链 http://poj.org/problem?id=1182 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9326 ...

  8. 洛谷 P1525 【关押罪犯】种类并查集

    题解 P1525 [关押罪犯]:种类并查集 前言: 在数据结构并查集中,种类并查集属于扩展域并查集一类. 比较典型的题目就是:食物链(比本题难一些,有三个种类存在) 首先讲一下本题的贪心,这个是必须要 ...

  9. 洛谷 P2024 [NOI2001]食物链 (并查集)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P2024 这道题和团伙这道题的思想比较类似,都是一个数组分成几个集合,但这道题的思路更加混乱,建议没做 ...

随机推荐

  1. shiro权限框架(三)

    三.身份验证 身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份 ID 一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明 在 shiro 中,用户需要提供 principa ...

  2. pycharm 的安装及selenium环境的搭建

    6.呵呵哒,前面写了一篇pycharm的安装,,结果自己都看不懂了,copy了别人的,,,自己现在再写一遍,这篇文章主要写pycharm 的安装及selenium 环境的搭建,selenium的搭建不 ...

  3. android中xml tools属性详解(转)

    第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...

  4. Wannafly交流赛1(施工中)

    A.有理数 签到题:直接用floor函数就行了,详细看代码 #define debug #include<stdio.h> #include<math.h> #include& ...

  5. JavaScript(第三十二天)【Ajax】

    2005年Jesse James Garrett发表了一篇文章,标题为:"Ajax:A new Approach to Web Applications".他在这篇文章里介绍了一种 ...

  6. 冲刺NO.6

    Alpha冲刺第六天 站立式会议 项目进展 项目中学生基本信息管理,与系统管理员模块基本完成,团队开始编写学生信用信息模块内容与奖惩事务管理内容,准备开始对已完成模块进行测试. 问题困难 团队成员对前 ...

  7. ajax 返回Json方法

    public static void sendJsonData(String data) { ActionContext ac = ActionContext.getContext(); HttpSe ...

  8. collections deque队列及其他队列

    from collections import deque dq = deque(range(10),maxlen=10) dq.rotate(3)#队列旋转操作接受一个参数N,让N>0时,队列 ...

  9. scrapy crawl xmlfeed spider

    from scrapy.spiders import XMLFeedSpider from myxml.items import MyxmlItem class XmlspiderSpider(XML ...

  10. pandas 使用

    ss = [['xx','m',22],['cc','w',33],['jj','w',44],['qq','m',11]] import pandas as pd df = pd.DataFrame ...