1390:食物链【NOI2001】

news2024/11/17 9:42:49

1390:食物链【NOI2001】
时间限制: 1000 ms         内存限制: 65536 KB
【题目描述】
动物王国中有三类动物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(1≤ N ≤50,000)和K句话(0≤K≤100,000),输出假话的总数。
【输入】
第一行是两个整数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
【提示】
【样例解释】

 

//示例代码
#include <iostream>
#include <cstdio>
using namespace std;

const int N=150005;   // 定义常量 N,表示数组大小
int n,k,F;           // n 表示点的数量,k 表示操作数, F 表示不合法的操作数。
int f[N];            // 数组 f 存储点的祖先

// 并查集中的查找操作,实现路径压缩
int find(int x){
    if(f[x]==x) return f[x];
    return f[x]=find(f[x]);
}

// 并查集中的合并操作
void unionn(int x,int y){
    x=find(x);
    y=find(y);
    if(x!=y) f[y]=x;
}

int main()
{
    scanf("%d %d",&n,&k);  // 输入点的数量和操作数
    for(int i=1;i<=n*3;i++)f[i]=i;  // 初始化并查集,每一个点是其自己的祖先。

    int d,x,y;   // d 表示每个操作的类型,x、y 表示需要连接的两个点的编号。
    while(k--){
        scanf("%d %d %d",&d,&x,&y);
        if(x>n||y>n){  // 判断输入的点是否合法。如果一个点的编号大于 n,代表这个操作是不合法的。
            F++; continue;
        }
        else if(d==1){   // 如果操作类型为 1,x,y为同类
            if(find(x)==find(y+n) || find(x)==find(y+n*2))  
                F++; // 如果x的猎物是y或y的天敌  为假
            else{  // 否则,合并。
                unionn(x,y);//同类合并
                unionn(x+n,y+n);//x的天敌和y的天敌是同类
                unionn(x+2*n,y+2*n);//x的猎物也和y的猎物是同类
            }    
        }
        else if(d==2){   // 如果操作类型为 2,x的猎物是y。
            if(find(x)==find(y) || find(x)==find(y+n*2))  
                F++; // 如果x,y同类 或 x的天敌是y  则假。
            else{  // 否则,合并。
                unionn(x,y+n);//x的猎物是y
                unionn(x+n,y+2*n);//x的天敌也是y的猎物
                unionn(x+2*n,y);//y的天敌是x
            }    
        }
    }
    printf("%d",F);   // 输出不合法操作的数量。
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全常见基础名词概念

一、域名 1、域名&#xff1a;相当网站的名字&#xff0c;互联网上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时标识计算机的电子方位。 2、网域名系统&#xff08;Domain Name System&#xff09;有时也简称为域名&#xff08;DNS&#xff09;&#xff0c;是互…

Sametime 12.0.1 FP1发布以及Notes中的SwiftFile使用

大家好&#xff0c;才是真的好。 上周&#xff0c;HCL推出了Sametime 12.0.1FP1FP1更新包程序&#xff0c;包含不少新功能以及很多修复程序。虽然Sametime组件现在不需要运行在Domino服务器上&#xff0c;但毕竟Sametime通常会使用Domino目录或Domino中的LDAP目录服务&#xf…

陆奇最新演讲高清PPT下载;AI 绘画20+工具体验汇总;我愿称MOSS为全球开源界最强;思否AIGC黑客马拉松北京站 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『陆奇罕见公开演讲「新范式 新时代 新机会」』高清PPT和视频可直接下载 ShowMeAI知识星球资料编号&#xff1a;R054 奇绩创坛创始人兼…

ChatGPT实现命名实体识别(NER, named entity recognization)和词性归类

语义分析词格分类 命名实体识别(NER, named entity recognization)和词性归类是 NLP 技术中的关键一环。过去 NLP 领域有不少流行的开源项目专注在这个领域&#xff0c;如 Spacy、NLTK 等等。我们来试试 ChatGPT 在这方面的表现情况如何。我们从"四渡赤水"的百度百科…

故障预测与健康管理PHM如何做可解释性研究?

首先&#xff0c;故障预测与健康管理PHM基于先进传感器技术获取复杂设备的运行状态信息&#xff0c;借助智能算法实现复杂工程系统的故障诊断、健康状态预测与管理。基于机器学习的PHM技术能够充分挖掘多源异构数据的信息&#xff0c;提高故障诊断、健康状态预测以及剩余寿命估…

uniapp微信小程序连接蓝牙打印机 打印文字、图片

首先感谢几位的文章分享 https://blog.csdn.net/guairena/article/details/127941515 https://blog.csdn.net/qq_37970097/article/details/119148707 效果图&#xff1a; 使用的是 芝柯cc3 蓝牙打印机, 我这里没有存储蓝牙设备相关信息。所以每次打印都会重新初始化并搜索设…

Undefined symbol解决方法

1.初级错误 (1)C中未定义 (2)H中未引用 (3)未包含含有该类型的.H文件 (4)在keil中未添加.C或.H文件到工程 2.C和C代码混合调用引起的未定义错误 1.一般情况下&#xff0c;Error: L6218E: Undefined symbol 若是由于未定义引起的错误&#xff0c;可以根据错误提示定位到相应的…

大模型时代,RPA的冰与火之歌|产业特稿

从市场趋势来看&#xff0c;RPA属性正在逐渐淡化&#xff0c;一些厂商都已瞄准更高阶的智能机器人。可能未来5&#xff5e;10年&#xff0c;随着AI语言模型的发展&#xff0c;RPA的产品逻辑会彻底改变&#xff0c;RPA厂商也会进化到更智能的阶段。 作者|思杭 编辑|皮爷 出…

C#开发的OpenRA的游戏侧边界面

C#开发的OpenRA的游戏侧边界面 OpenRA游戏开始之后,会在右边提供一个游戏侧边界面, 通过这个游戏界面,可以查看游戏状态、执行一些特殊的命令,以及雷达显示, 还有创建各种需要的建筑物,以及生产各种兵种,飞机等等。 这个游戏界面,就是给玩家提供一个操作平台,因此它…

年轻不乏野心,想做年薪40万+的软件测试工程师?写给长途漫漫中的你...

本人从事自动化测试10年多&#xff0c;之前在猪场工作&#xff0c;年薪突破40W&#xff0c;算是一个生活过得去的码农。&#xff08;仅代表本人&#xff09; 目前从事自动化测试的薪资待遇还是很不错的&#xff0c;所以如果朋友们真的对自动化感兴趣的话可以坚持学下去&#xf…

开放式蓝牙耳机排行,列举几款值得推荐的开放式蓝牙耳机

开放式耳机是通过人的颅骨振动将声音转换成声波&#xff0c;不通过耳膜&#xff0c;可以听到外界的声音&#xff0c;可以保护耳朵&#xff0c;也可以保护听力。并且大部分的开放式耳机都是采用挂耳式的佩戴设计&#xff0c;即使是长时间佩戴也不会让耳朵感到疲劳&#xff0c;下…

线性回归模型(7大模型)

线性回归模型&#xff08;7大模型&#xff09; 线性回归是人工智能领域中最常用的统计学方法之一。在许多不同的应用领域中&#xff0c;线性回归都是非常有用的&#xff0c;例如金融、医疗、社交网络、推荐系统等等。 在机器学习中&#xff0c;线性回归是最基本的模型之一&am…

Cortex-A7中断详解(一)

STM32中断系统回顾 中断向量表NVIC&#xff08;内嵌向量中断控制器&#xff09;中断使能中断服务函数 中断向量表 中断向量表是一个表&#xff0c;表里面存放的是中断向量。 中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量&#xff0c;因此中断向量表是一系…

电脑开机memory management错误蓝屏了怎么办?

电脑开机memory management错误蓝屏了怎么办&#xff1f;windows系统出现不兼容问题之后&#xff0c;很容易出现电脑蓝屏的情况。最近有用户遇到了上述的蓝屏错误情况&#xff0c;不知道怎么去进行解决。今天我们就一起来看看以下的解决方法分享吧。 准备工作&#xff1a; 1、U…

yolov5半自动打标签(opencv版本),识别目标画框并将坐标信息保存在xml中

文章目录 1.yolov5预训练模型推理2. opencv边缘检测结果展示 yolov5训练数据集时&#xff0c;需要对数据进行打标签&#xff0c;可以通过两种方法进行半自动化打标签。 1.yolov5预训练模型推理 yolov5预训练模型&#xff1a;将待打标签的图片输入预训练模型中进行推理&#xf…

实现PXE批量网络装机及kickstrat无人值守安装(富士山终究留不住欲落的樱花)

一、PXE概述和部署PXE批量装机 1.PXE简介 PXE&#xff08;预启动执行环境&#xff0c;在操作系统之前运行&#xff09;是由Intel公司开发的网络引导技术&#xff0c;c/s架构&#xff0c;允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统…

2023_8.0.33版windows版MySql安装_配置远程连接_修改设置初始密码---MySql工作笔记0001

MySQL :: Download MySQL Community Server https://dev.mysql.com/downloads/mysql/ 首先去下载mysql 可以看到这里下载第一个就可以了,最新版的8.0.33 这里点击仅仅下载 just start my download 然后解压到一个文件夹,然后配置一下环境变量 然后新建一个my.ini文件 然后把…

ubuntu22.04下挂载第二块硬盘

文章目录 一、查看硬盘情况二、找到nvme1n1三、挂载四、修改分区文件 一、查看硬盘情况 首先要查看一下系统识别出来的设备。也就是说&#xff0c;我希望知道&#xff0c;ubuntu到底发现了几块硬盘。用命令&#xff1a;lsblk 显示结果如下&#xff1a; 有两块硬盘&#xff1a…

Win11打开移动热点后电脑无法上网怎么办?

Win11打开移动热点后电脑无法上网怎么办&#xff1f;有用户将自己的电脑开启移动热点来使用的时候&#xff0c;发现自己的电脑出现了无法上网的情况。那么为什么开启热点之后&#xff0c;就会无法进行上网呢&#xff1f;来看看以下的解决方法分享吧。 Win11打开移动热点无法上网…

virtual kubelet 简单使用例子

virtual kubelet 简单使用例子 实现过程制作virtual kubelet节点证书下载virtual kubelet代码并编译virtual kubelet virtual kubelet 顾名思义就是虚拟的kubelet节点 效果如下&#xff1a; 实现过程 制作virtual kubelet节点证书 openssl genrsa -out client.key 2048 opens…