题目描述


动物王国中有三类动物 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 句话,输出假话的总数。


输入输出格式

输入格式:

从 eat.in 中输入数据


第一行两个整数,N,K,表示有 N 个动物,K 句话。


第二行开始每行一句话(按照题目要求,见样例)


输出格式:

输出到 eat.out 中


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



输入输出样例


输入样例#1:

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
输出样例#1:

3

说明


1 ≤ N ≤ 5 ∗ 10^4


1 ≤ K ≤ 10^5

这题显然要用并查集。因为只有3种动物,我的方法是对每个动物x建立3个集合:x表示与x同类的动物,x+n表示要x吃的动物,x+2*n表示吃x的动物。

对于每个读入的描述D X Y,做以下处理:

  • 如果X或Y不再区间[1,n]中,这句是假话。

  • D为1

如果x+n或x+2*n与y在同一个集合中说明已知x和y不是同一种动物,这句是假话;

否则,分别将x与y,x+n与y+n,x+2*n与y+2*n合并。

  • D为2

如果x与y在同一个集合中,说明已知x和y是同一种动物,这句是假话;

如果x+2*n与y在同一个集合中,说明已知y吃x,这句是假话;

否则,分别将x与y+2*n,x+n与y,x+2*n与y+n合并。

<hr>

说起来很复杂,实现起来其实很简单,代码见下:

 
//Gang
//fa[x+n]为x的食物,fa[x+2*n]为x的敌人
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#define FOR(x,y,z) for(int x=y;x<=z;x++)
#define REP(x,y,z) for(int x=y;x>=z;x--)
#define ll long long
using namespace std;
];
int a, x, y;
int Find(int x)
{
    int s,temp;
    s=x;
    while(x!=p[x])
    {
        x=p[x];
    }
    while(s!=x)
    {
        temp=p[s];
        p[s]=x;
        s=temp;
    }
    return x;
}
void Union(int x, int y)
{
    int xx = Find(x), yy = Find(y);
    if (xx != yy) p[xx] = yy;
}
int main()
{
    ;
    scanf("%d%d",&n,&k);
    FOR(i,,n*)p[i]=i;
    FOR(i,,k)
    {

        scanf("%d%d%d",&a,&x,&y);
         || y < )
        {
            ans++;
            continue;
        }
        )
        {
             * n) == Find(y))
            {
                ans++;
                continue;
            }
            Union(x, y);
            Union(x + n, y + n);
            Union(x +  * n, y +  * n);
        }
        else
        {
             * n) == Find(y))
            {
                ans++;
                continue;
            }
            Union(x, y +  * n);
            Union(x + n, y);
            Union(x +  * n, y + n);
        }
    }
    printf("%d",ans);
}

 

P2024食物链的更多相关文章

  1. P2024 食物链

    题面:P2024 食物链 emmm其实不太难想 开三倍的数组 1~n:是当前动物的同类 n~2*n:是当前动物吃的动物 2*n~3*n:是吃当前动物的动物 emmmm #include<iost ...

  2. 【luogu P2024 食物链】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2024 摘吊打集训队的九日dalao一句话 关于带有多个相对集合的全集,我们可以多开几倍的空间.每一倍的元素表 ...

  3. P2024 食物链(种类并查集)

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

  4. 洛谷P2024 食物链

    挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...

  5. 洛谷 P2024 食物链 POJ 1182 Label:并查集Turbo

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  6. 种类并查集(洛谷P2024食物链)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  7. luogu P2024 食物链

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  8. 洛谷P2024食物链——并查集补集的灵活运用

    题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...

  9. P2024 食物链 (补集)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

随机推荐

  1. C++开发象棋一 绘制棋盘

    这是我要和大家分享的基于C++和MFC开发的一个象棋程序,目的是练习编程实践和大家分享同时希望大家能给出指教. 进入主题 一.棋盘分析 这是我绘制的棋盘,棋盘的组成由9条竖线和10条横线构成.这儿我们 ...

  2. Javaweb项目开发的前后端解耦的必要性

    JavaWeb项目为何我们要放弃jsp?为何要前后端解耦?为何要动静分离? 使用jsp的痛点: 1.jsp上动态资源和静态资源全部耦合在一起,服务器压力大,因为服务器会收到各种静态资源的http请求, ...

  3. Ipad,IPhone(矩阵求递推项+欧拉定理)

    Ipad,IPhone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. 0_Simple__simpleAssert + 0_Simple__simpleAssert_nvrtc

    在核函数中使用强制终止函数 assert().并且在静态代码和运行时编译两种条件下使用. ▶ 源代码:静态使用 #include <windows.h> #include <stdi ...

  5. JavaNIO阻塞IO

    package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...

  6. Java多线程Future模式

    Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...

  7. 机器学习数学|微积分梯度jensen不等式

    机器学习中的数学 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原创文章,如需转载请保留出处 本博客为七月在线邹博老师机器学习数学课程学习笔记 索引 微积分,梯度和Jensen不等式 Tay ...

  8. Scrum Meeting Alpha - 4

    Scrum Meeting - NewTeam // 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 确定了API部分的目录结构及包装方式,完成了部分API的包装https:// ...

  9. Python和Excel交互

    Python和Excel交互 使用的python包为XlsxWriter 下载的链接 https://pypi.python.org/pypi/XlsxWriter 初级的例子: def write_ ...

  10. 数据库中File权限的危害

    The FILE privilege gives you permission to read and write files on the server host using the LOAD DA ...