zoukankan      html  css  js  c++  java
  • 食物链_KEY

    食物链

    (eat.pas/c/cpp)

    【 问题描述】

    动物王国中有三类动物 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 句话有的是真

    的, 有的是假的。 当一句话满足下列三条之一时, 这句话就是假话, 否则就是真话。

    1) 当前的话与前面的某些真的话冲突, 就是假话;

    2) 当前的话中 X 或 Y 比 N 大, 就是假话;

    3) 当前的话表示 X 吃 X, 就是假话。

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

    【 输入格式】

    第一行两个整数 N 和 K。

    以下 K 行每行三个正整数 D, X, Y, 以空格隔开, 其中 D 表示说法的种类。

    若 D=1, 则表示 X 和 Y 是同类。

    若 D=2, 则表示 X 吃 Y。

    【 输出格式】

    一个整数, 表示假话数。

    【 样例输入】

    100 7

    1 101 1

    2 1 2

    2 2 3

    2 3 3

    1 1 3

    2 3 1

    1 5 5

    【 样例输出】

    3

    【 数据范围】

    七句话分别是: 假、 真、 真、 假、 假、 真、 真。

    对于 100%的数据 1<=N<=50000, 0<=K<=100000。

    ——————————————————————————————————————

    这道题的标算是并查集。

    但是我们要怎么并查集呢?

    这里需要一个很巧妙的技巧,那就是开一个三倍的并查集数组(或者是三个)。

    第一个存储i的同类,第二个存储i吃的,第三个存储吃i的。

    如果读入的x,y是同类,那么x的同类也就是y的同类(此处进行合并集合操作),x吃的y也吃,吃x的也吃y。

    那么x吃y也是一样了。

    code

    for(int i=1;i<=k;i++)
    {
        int c=read(),x=read(),y=read();
        if(x>n || y>n)
        {
            ans++;
            continue;
        }
        if(c==1)
        {
            if(getf(x+n)==getf(y) || getf(x+n*2)==getf(y))
            {
                ans++;
                continue;
            }
            fa[getf(y)]=getf(x);
            fa[getf(y+n)]=getf(x+n);
            fa[getf(y+n*2)]=getf(x+n*2);
        }
        else
        {
            if(getf(x)==getf(y) || getf(x+n*2)==getf(y))
            {
                ans++;
                continue;
            }
            fa[getf(y)]=getf(x+n);
            fa[getf(y+n)]=getf(x+n*2);
            fa[getf(y+n*2)]=getf(x);
        }
    }
  • 相关阅读:
    silverlight click 事件委托是 RoutedEventHandler
    silverlight 2 系统对话框
    CSLA.Net 3.0.5 项目管理示例 UI ProjectEdit.aspx
    委托和事件 委托
    Visual Studio 项目模板、文件模板、代码段和环境设置
    C# 打好基础图文详解
    Hession 基础应用
    ADO.NET Entity Framework 概述
    CSLA.Net 3.0.5 项目管理示例 业务基类 Project.cs
    关于使用 Visual Studio 开发环境收费的问题,博友们谁有经验分享一下。
  • 原文地址:https://www.cnblogs.com/Cptraser/p/7593465.html
Copyright © 2011-2022 走看看