当前位置: 首页 > news >正文

食物链解读

[NOI2001] 食物链

题目描述

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

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

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

  • 第一种说法是 1 X Y,表示 X X X Y Y Y 是同类。
  • 第二种说法是2 X Y,表示 X X X Y Y Y

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

  • 当前的话与前面的某些真的话冲突,就是假话;
  • 当前的话中 X X X Y Y Y N N N 大,就是假话;
  • 当前的话表示 X X X X X X,就是假话。

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

输入格式

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

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

输出格式

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

样例 #1

样例输入 #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 × 1 0 4 1\le N\le 5 \times 10^4 1N5×104 1 ≤ K ≤ 1 0 5 1\le K \le 10^5 1K105

这是一道没本事的中等题,看过的人都知道用指针做。不过在实操的过程中有几个小点需要注意:
先看代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int N=50010;
int  n,k,res;
int p[N],d[N];
int find(int x)
{if(p[x]!=x){int t=find(p[x]);d[x]+=d[p[x]];p[x]=t;}return p[x];
}
int main()
{cin>>n>>k;for(int i=1;i<=n;i++){p[i]=i;}while(k--){int m,x,y;cin>>m>>x>>y;if(x>n||y>n){res++;}else{int px=find(x),py=find(y);if(m==1){if(px==py&&(d[x]-d[y])%3)res++;else if(px!=py){p[px]=py;d[px]=d[y]-d[x];}}else{if(px==py&&(d[x]-d[y]-1)%3)res++;else if(px!=py){p[px]=py;d[px]=d[y]-d[x]+1;}}}}cout<<res;return 0;
}

小点1

d[px]=d[y]-d[x] 和 d[px]=d[y]-d[x]+1 是怎么来的?
根据指针指向,m1时,d[x]+?=d[y],?=d[y]-d[x];m2时,d[x]+?-1=d[y],?=d[y]-d[x]+1。

小点2

find 函数

int find(int x)
{if(p[x]!=x){int t=find(p[x]);d[x]+=d[p[x]];p[x]=t;}return p[x];
}

这样是对的,大家都能看出来,但有没有人觉得 t 有些多余?
想改成这样:

int find(int x)
{if(p[x]!=x){d[x]+=d[p[x]];p[x]=find(x);}return p[x];
}

但这样是过不了的
下面的代码却能过:

int find(int x)
{if(p[x]!=x){int t=find(p[x]);d[x]+=d[p[x]];p[x]=find(p[x]);}return p[x];
}

发现问题所在了吗?
一般情况下,t 确实无用,但这是递归,p[x] 要不要变,要的,但在什么时候变?
一定要在先 find(p[x]) 再更新 d[x],为什么?
因为这是递归,递归什么特点?
从最后一种情况慢慢往前推,因为你没有办法保证 d[p[x]] 一开始一定存在,所以需要不断地更新 d[x]。

相关文章:

食物链解读

[NOI2001] 食物链 题目描述 动物王国中有三类动物 A , B , C A,B,C A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。 A A A 吃 B B B&#xff0c; B B B 吃 C C C&#xff0c; C C C 吃 A A A。 现有 N N N 个动物&#xff0c;以 1 ∼ N 1 \sim N 1∼N 编号。…...

Day10配置文件日志多线程

配置文件 在企业开发过程中&#xff0c;我们习惯把一些需要灵活配置的数据放在一些文本文件中&#xff0c;而不是在Java代码写死 我们把这种存放程序配置信息的文件&#xff0c;统称为配置文件 properties 是一个Map集合&#xff08;键值对集合&#xff09;&#xff0c;但是我…...

leetcode:1154. 一年中的第几天(python3解法)

难度&#xff1a;简单 给你一个字符串 date &#xff0c;按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1&#xff1a; 输入&#xff1a;date "2019-01-09" 输出&#xff1a;9 解释&#xff1a;给定日期是2019年的第九天。 示例…...

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…...

flutter升级+生成drift文件

1. flutter升级 可以安装fvm进行flutter version manager FVM 安装笔记 - 掘金 (juejin.cn) 使用flutter upgrade, 但是没有效果&#xff0c; 可能需要到我的电脑中&#xff0c;更改高级系统设置&#xff1b;改变/增加环境变量&#xff1b;用来加上flutter官网获取信息的内…...

[AUTOSAR][诊断管理][ECU][$34] 下载请求

文章目录 一、简介二、服务请求报文定义肯定响应支持的NRC三、示例代码34_req_dowload.c一、简介 RequestDownload(0x34)—— 下载请求 这个服务主要是用来给ECU下载数据的,最常见的应用就是在bootloader中,程序下载工具会发起下载请求,以完成ECU程序的升级。 二、服务…...

C 标准库 - <errno.h>和<float.h>详解

目录 简介 常见库宏 简介 常见库宏 <errno.h> 简介 <errno.h>头文件定义了一个名为errno的全局变量&#xff0c;用于表示最近发生的错误代码。errno是一个整数变量&#xff0c;它的值通常是一个非零的错误代码&#xff0c;用于指示发生了什么类型的错误。也可以…...

对于如何学习的一点思考

目录 1、学习遇到的问题 2、问题分析 3、解决思路 1、学习遇到的问题 我们经常在学习一个知识时&#xff0c;经常会遇到知识点凌乱、读书效率低、缺乏长期记忆等问题&#xff0c;主要体现在&#xff1a; 知识点凌乱&#xff1a;花时间学习了很多技术点&#xff0c;但是由于…...

Ensemble Methods集成学习大比拼:性能、应用场景和可视化对比总结

集成学习(Ensemble Learning)是一种机器学习范式,其中多个模型(通常称为“弱学习器”)被训练以解决相同的问题,并且通过某种方式结合它们的预测以提高整体性能。这种方法的核心思想是,多个模型比单一模型更能准确地预测未知数据。在本文中,我们将探讨多种集成学习算法,…...

【2024秋招】2023-9-16 贝壳后端开发二面

1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示&#xff0c;点对点模式通常是基于拉取或者轮询…...

SpringCloud 微服务全栈体系(七)

第九章 Docker 一、什么是 Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致…...

SAP ABAP 报表输出成 excel 统计图形 (RFC : GFW_PRES_SHOW_MULT)

SAP 预设了一个类型组 GFW &#xff0c;做简单的excel图形输出 话不多说&#xff0c;直接上代码&#xff1a; *&---------------------------------------------------------------------* *& Report ZCYCLE057 *&----------------------------------------------…...

微信小程序如何获取地理位置

在微信小程序中&#xff0c;可以通过以下步骤获取用户的地理位置&#xff1a; 在小程序的app.json文件中配置权限&#xff1a; json "permission": {"scope.userLocation": {"desc": "你的位置信息将用于获取附近的服务"} }这样配置后…...

计算机网络相关硬件介绍

计算机相关硬件 计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑计算机硬件部件组成。 一、中央处理器&#xff08;CPU&#xff09;&#xff08;运算器、控制器&#xff09; &#xff08;1&#xff09;运算器 运算器是对数据进行加工处理的部件&#xff…...

Megatron-LM GPT 源码分析(三) Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;二&#xff09; Sequence Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…...

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块

首先了解涉及的新词汇&#xff0c;编程外国人发明的&#xff0c;所以大部分是和他们语言相关&#xff0c;了解对应意思&#xff0c;可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口&#xff0c;进口商品&#xff1b;输入&#xff0c;引进&#xff1b;重要性&#xff1b;…...

Python的比较运算符查询表

据个人的编程开发经验&#xff0c;Python的比较运算符最常于条件判断&#xff0c;而条件判断是python编程中最常用的语法之一&#xff0c;与for或while的循环一样&#xff0c;功能十分强大&#xff01; 在机器学习当中&#xff0c;或深度学习当中&#xff0c;在运用算法对统计…...

C/C++面试常见问题——const关键字的作用和用法

首先我们需要一下const关键字的定义&#xff0c;const名叫常量限定符&#xff0c;当const修饰变量时&#xff0c;就是在告诉编译器该变量只可访问不可修改&#xff0c;而编译器对于被const修饰的变量有一个优化&#xff0c;编译器不会专门为其开辟空间&#xff0c;而是将变量名…...

Vue3.3指北(四)

Vue3.3指北 1、WebPack - VueCLI1.1、WebPack安装VueCli1.2、vue create 创建项目1.3、项目目录结构介绍 2、ViteVue32.1、认识create-vue2.2、使用create-vue创建项目2.3、项目目录剖析2.4、ESlint代码规范及手动修复2.5、通过eslint插件来实现自动修正 3、VueRouter43.1、单页…...

vue如何使用路由拦截器

在 Vue 中使用路由拦截器需要使用 Vue Router 提供的 beforeEach 方法。beforeEach 方法会在每个路由切换前&#xff0c;对路由进行拦截处理。可以在这个方法中进行一些验证或者权限认证&#xff0c;如果满足条件则继续跳转&#xff0c;否则取消跳转并进行相应处理。 下面是一…...

OpenClaw+千问3.5-9B智能翻译:多语言文档自动处理

OpenClaw千问3.5-9B智能翻译&#xff1a;多语言文档自动处理 1. 为什么需要本地化智能翻译 去年参与一个跨国开源项目时&#xff0c;我每天要处理英日韩三种语言的开发文档。传统翻译工具需要手动复制粘贴&#xff0c;遇到代码片段还会破坏格式。更麻烦的是技术术语的准确性—…...

Mi-Create:让小米穿戴设备拥有专属表盘的3步可视化设计法

Mi-Create&#xff1a;让小米穿戴设备拥有专属表盘的3步可视化设计法 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 你是否厌倦了小米手表上那些千篇一律的官…...

GetQzonehistory:3步轻松永久备份QQ空间所有历史说说

GetQzonehistory&#xff1a;3步轻松永久备份QQ空间所有历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里那些承载青春记忆的说说会突然消失吗&#xff1f;GetQ…...

3大核心问题解决:B站视频处理全流程指南从下载到去水印的实战方案

3大核心问题解决&#xff1a;B站视频处理全流程指南从下载到去水印的实战方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水…...

Qwen3-ForcedAligner-0.6B与LaTeX的学术工作流整合

Qwen3-ForcedAligner-0.6B与LaTeX的学术工作流整合 1. 引言 学术研究过程中&#xff0c;我们经常需要处理大量的访谈录音、讲座内容或实验讨论。传统的手工转录不仅耗时耗力&#xff0c;更让人头疼的是如何在最终论文中精准引用特定时间点的对话内容。想象一下&#xff0c;你…...

开源阅读鸿蒙版完整指南:打造你的专属数字图书馆

开源阅读鸿蒙版完整指南&#xff1a;打造你的专属数字图书馆 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 开源阅读鸿蒙版是一款专为鸿蒙系统用户设计的免费开源电子书阅读器&#xff0c;它彻底改变…...

Windows Cleaner智能清理引擎:全方位提速系统的开源解决方案

Windows Cleaner智能清理引擎&#xff1a;全方位提速系统的开源解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 在数字化办公环境中&#xff0c;系统优化…...

PhotoScan软件在无人机航测数据处理中的高效应用流程

1. 无人机航测数据处理入门指南 第一次接触无人机航测数据处理的同学可能会觉得这是个高大上的技术活&#xff0c;其实只要掌握了PhotoScan这个神器&#xff0c;处理起来比想象中简单得多。我刚开始接触时也走了不少弯路&#xff0c;现在把最实用的经验分享给大家。 PhotoScan是…...

【C++27 constexpr革命性突破】:5大新增约束与3类不可逆性能跃迁,资深编译器工程师亲授落地实践

第一章&#xff1a;C27 constexpr革命性突破的底层动因与标准演进全景C27 将首次允许 constexpr 函数完整支持动态内存分配&#xff08;std::allocator 与 new/delete&#xff09;、虚函数调用、异常处理&#xff08;try/catch&#xff09;及完整 I/O 流子集&#xff0c;其根本…...

【AI】可以操控鼠标的智能体

2026-04-02&#xff0c;以下是当前&#xff08;截至2026年初&#xff09;可以操作鼠标的AI智能体最新格局&#xff0c;分为操作系统级控制&#xff08;真鼠标键盘控制&#xff09;和浏览器级控制两类&#xff1a;第一梯队&#xff1a;操作系统级鼠标控制&#xff08;全桌面操控…...