POJ 1182食物链————并查集复习

poj1182:食物链 题解 poj1182:食物链 听说是poj中最经典的一道并查集题目。我一做,果然很经典呢!好难啊!!!真的琢磨了很久才弄懂。这道题的重点就在于怎么用并查集表示题目中的关系环。 1. 题干 原题传送门1 原题传送门2 2. 思路详解 实际上,在做这道题之前,我对并查集的了解就只停留在权重选择和压缩路径上。也就是大家司空见惯的那种模板。顺带再默写一遍复习一下: #include <vector> using namespace std; class unionfind { public: 阅读详情

食物链

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 105782 Accepted: 32027
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句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。
Input
第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。
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
Sample Output
3
Source
Noi 01


经典并查集问题
难点是合并x,y
具体可参考这篇博客

// #include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<vector>
using namespace std;
typedef long long ll;
const int MAXN = 50005;
int p[MAXN];
int r[MAXN];

void init(int n)
{
        for(int i=0;i<=n;++i)
        {
                p[i] = i;
                r[i] = 0;//自己总是自己的同类
        }
}

int find(int x)//找父亲节点
{
        if(x == p[x])   return x;

        int t = p[x];
        p[x] = find(p[x]);
        r[x] = (r[x]+r[t])%3;
        return p[x];
}

void join(int x, int y, int d)
{
        int fx = find(x);
        int fy = find(y);
        p[fy] = fx;
        r[fy] = (3 + r[x] - r[y] + (d - 1)) % 3;
}

int main(){
        // freopen("../in.txt","r",stdin);
        // freopen("../out.txt","w",stdout);
        // ios::sync_with_stdio(0);
        // cin.tie(0);
        int n,k;
        scanf("%d %d",&n,&k);
        init(n);
        int ans = 0;
        for(int i=0;i<k;++i)
        {
                int d, x, y;
                scanf("%d %d %d",&d,&x,&y);
                if(x > n || y > n || (d == 2 && x == y)){
                        ans ++;
                        continue;
                }
                else if(find(x)==find(y)){//原来有关系的话就判断这句话是否正确
                        if(d==1 && r[x] != r[y])                   ans++;
                        if(d==2 && (r[x] + 1) % 3 != r[y])         ans++;
                }
                else    join(x,y,d);//否则就建立关系
        }
        cout<<ans<<endl;
        return 0;
}

并查集算法进阶学习 继续数据结构的复习,本次的专题是:并查集。       并查集,顾名思义,干的就是“并”和“查”两件事。很多与集合相关的操作都可以用并查集高效的解决。        两个操作代码:        int Find(int x)        {           if (tree[x].parent != x)           {               tree[ 阅读详情

相关推荐

交通小白首投TRB就中Oral?我的完整时间线与避坑指南(附Editorial Manager实操截图)

本文详细解析了交通领域新手如何高效完成TRB国际会议投稿的全流程,从选题策略到投稿系统实操,再到评审过程解析和常见误区避坑指南。特别针对初次投稿者提供了实用建议,包括时间规划、选题考量、Editorial Manager系统操作技巧,以及如何应对评审意见。文章还分享了从录用到会议参与的关键步骤,帮助研究者提升投稿成功率。

weixin_27303545的博客 386

并查集:POJ 1182 食物链 复习

并查集:POJ 1182 食物链 复习 #include <iostream> #include <algorithm> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std; ...

豆子 178

ChatIE:基于ChatGPT的零样本信息抽取实战指南

信息抽取是自然语言处理中的核心任务,旨在从非结构化文本中自动识别并结构化关键信息,如实体、关系及事件。传统方法依赖大量标注数据训练专用模型,流程复杂且成本高昂。随着大语言模型的发展,通过提示工程引导模型理解任务,实现了无需训练数据的零样本抽取能力,极大降低了技术门槛与应用成本。这种范式将信息抽取重构为多轮对话问题,通过分阶段提问引导模型逐步输出结构化结果,在快速原型验证、领域适配及小规模数据探索中展现出显著技术价值。本文以ChatIE项目为例,深入解析如何利用ChatGPT API,通过精心设计的提示词与两

weixin_30540691的博客 404

POJ 1182 食物链 (并查集)(需复习!!)

转载自:http://blog.youkuaiyun.com/niushuai666/article/details/6981689 题目链接:http://poj.org/problem?id=1182 解题思路: 这道题是并查集题目中的经典。。。而且比普通并查集提高了一个档次,下面在基础并查集的前提上讲解并查集的真正用法。 基础回顾: find()函数找根结点的两种写法如下: 第一

qq_36782366的博客 241

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

本文主要是对同构和异构传感器在指定空间内的布局进行优化,以最大覆盖率为目标,使用了DBO/SCA/WOA/SSA/NOA等启发式算法,在100x100的空间内,对30,100,200个传感器进行优化,得到最优的布局位置和对应覆盖率。

u013367499的博客 1818

基础矩阵、本质矩阵、单应矩阵

基础矩阵是一个 3×3 的秩为2的矩阵,用于描述两个不同视图(或称为图像)之间对应点的几何约束。更具体地说,如果你有两幅图像,分别从两个不同的相机或者相机位置拍摄,那么基础矩阵可以用于找到一个图像中的点在另一个图像中的对应点。本质矩阵也是一个 3×3 的秩为2的矩阵,与基础矩阵非常类似。当两个视图(图像)之间的场景是一个平面或者两个视图之间仅有旋转和平移时,可以使用单应矩阵来关联这两个视图。这三个矩阵都是在计算机视觉中广泛应用的基础工具,但它们适用于不同类型的视图和场景。给定两个图像中的一对对应点。

Gloamirror的博客 1328

挑战程序竞赛 (并查集) POJ 1182 & 2492 & 1703

POJ 1182 食物链 点击这里 查看题目 我感觉我学过的并查集一下子看不懂了。总之不是简单的并查集,而是种...种类并查集?简单来说就是基本的并查集只需要判断两个是否属于同一组,而种类并查集则需要判断两个个体之间的关系(同一组?你吃我?我吃你?) 推荐一个题目详解博客:Click HERE 解题思路: 总之我写题解也是为了给自己以后好复习,这里让我茅塞顿开的一些提示: 两个个体x和...

ysugarr 370

calibration的“前世今生”——从simulink开发到CANape的XCP标定

整体思路 备注: elf可简单的看作为hex和map的集合,其中包括可执行的程序、变量及其对应的地址(simulink生成代码是也可以勾选生成ASAP2的a2l文件,有变量但变量对应的地址为空,只有编译后才分配地址) 定义变量是观测值还是标定值需要在simulink中的数据字典定义变量存储类型,详见simulink系列。 1. 前期准备A2L的制作 安装完成CanApe软件 , 插上CanApe硬件( 如:vector 1640A)。打开A2L编辑软件 ASAP2 Editor(注意不是ASAP2 Vi

IHTY_NUI的博客 1万+

POJ并查集小结(转)

并查集小结 并查集大体分为三个:普通的并查集,带种类的并查集,扩展的并查集(主要是必须指定合并时的父子关系,或者统计一些数据,比如此集合内的元素数目。) POJ-1182 经典的种类并查集 POJ-1308 用并查集来判断一棵树。。注意空树也是树,死人也是人。 POJ-1611 裸地水并查集 POJ-1703 种类并查集 POJ-1988 看上去似乎和种类并查集无关,

夏天的风 7020

EtherCAT丢包问题深度解析:从原理到实战排查指南

在工业自动化与运动控制领域,实时通讯网络的稳定性是系统可靠运行的基石。EtherCAT(以太网控制自动化技术)作为一种高性能工业以太网协议,其核心在于独特的“飞读飞写”机制和纳秒级的分布时钟同步,以实现多设备间的精准协同。然而,物理链路干扰、配置不当或硬件性能瓶颈都可能导致数据帧丢失,破坏时钟同步,进而引发伺服抖动、定位精度下降乃至生产线停机。本文聚焦于EtherCAT丢包这一典型故障,结合SSC(Slave Stack Code Tool)从站协议栈开发与实时系统调优等工程实践,系统阐述其成因、影响及一套

weixin_32050773的博客 341

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2775

带权并查集 向量并查集 poj1182 食物链

第三次复习了,最经典的并查集  题意:动物王国中有三类动物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个动物,用上述两种说

nankeyimeng的博客 1052

【图像去噪】基于偏微分方程(PDE)实现图像去噪附matlab代码

在工程应用中,图像信息通过数字图像系统进行处理、存储和传输等加工变换时,由于不可避免地受到噪声干扰,使得原始图像信息产生偏差和失真,给图像的后续处理带来不便,进而影响人们对图像视觉特性的认知程度。因此,为了改善图像的质量效果,提高人们对图像视觉特性的认知度,对图像噪声进行有效去除,降低噪声对图像信息的干扰是很有必要的。近年来,基于偏微分方程( partial differential equation,PDE) ​的图像去噪方法在计算机视觉和图像处理等技术领域得到了广泛的重视,因为它在平滑噪声的同时,能够很

qq_59747472的博客 855

poj并查集小结

并查集小结 并查集大体分为三个:普通的并查集,带种类的并查集,扩展的并查集(主要是必须指定合并时的父子关系,或者统计一些数据,比如此集合内的元素数目。) POJ-1182 经典的种类并查集 POJ-1308 用并查集来判断一棵树。。注意空树也是树,死人也是人。 POJ-1611 裸地水并查集 POJ-1703 种类并查集 POJ-1988 看上去似乎和种类并查集无关,但其实仔

wahaha1_的专栏 2125

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ 1182 食物链 (经典带权并查集)

第三次复习了,最经典的并查集 题意:动物王国中有三类动物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个动物,用上述两种说法,

专注如一的博客 780

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hdu 1829 A Bug's Life && Poj 1182 食物链 (并查集偏移量的应用)

复习了一下并查集偏移量的应用,A Bug's Life比食物链简单些,偏移量只有0和1。 偏移量:维护所有集合的根的偏移量都为0。在集合合并时,若两集合对应偏移量不同,改变被合并集合根的偏移量,而集合内部的偏移量暂不改变,在以后查询某点偏移量时,先调用find函数,在find函数中递归更新偏移量值。 Hdu 1829 A Bug's Life 输入可交配的虫子,判断有没有同性交配 #i

taozifish的专栏 919

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

带权并查集模板(poj1182食物链验证)

暑假才做过。。。忘完了,重新复习带权并查集 #include using namespace std; int a,b,error=0; int n,k,set[50500]; int rank[50500]; int d,x,y; long findset(int

alven‘s bookcase 1174

并查集小结

http://bchine.com/mjmjmtl/?p=306 并查集大体分为三个:普通的并查集,带种类的并查集,扩展的并查集(主要是必须指定合并时的父子关系,或者统计一些数据,比如此集合内的元素数目。) POJ-1182 经典的种类并查集 POJ-1308 用并查集来判断一棵树。。注意空树也是树,死人也是人。 POJ-1611 裸地水并查集 POJ-1703 种类并查

逍遥小章 879

POJ 并查集小结

转载自:http://blog.youkuaiyun.com/wahaha1_/article/details/8068947 并查集小结 并查集大体分为三个:普通的并查集,带种类的并查集,扩展的并查集(主要是必须指定合并时的父子关系,或者统计一些数据,比如此集合内的元素数目。) POJ-1182 经典的种类并查集 POJ-1308 用并查集来判断一棵树。。注意空树也是树,死人

herongwei 的 BLOG 1113

POJ-1182-食物链(并查集)

今天又重新复习了下并查集,发现食物链挺好的。 这次用的是枚举他们之间的关系,我觉得比赛时我也应该会这么写,而不是公式判断。 题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1...

weixin_30614587的博客 76

POJ 1182 食物链——种类并查集

感觉这种题型快忘了,拿出来复习一下。 https://blog.youkuaiyun.com/niushuai666/article/details/6981689 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace s...

hao_zong_yin的博客 333

POJ 并查集 题目汇总 ——czyuan原创

http://hi.baidu.com/czyuan_acm/item/13cbd3258c29e20d72863edf 继续数据结构的复习,本次的专题是:并查集。       并查集,顾名思义,干的就是“并”和“查”两件事。很多与集合相关的操作都可以用并查集高效的解决。        两个操作代码:        int Find(int x)        {

晚晴小筑 1404

【POJ】1182食物链

按照挑战程序设计的思路敲的,有个坑,要用scanf,之前试过cin优化,还是无法逃脱TLE的命运,换成scanf可以过 对于题目本身的解法,有点似懂非懂,当然,并查集的几个基本操作复习了一下,然后,不是很懂,为什么unite(x,x + n) x + n里面不是空的么…… 后来懂了,x + n里面是空的,但是unite的是下标代表的数,fine。 主要程序很简洁,这个……很漂亮的 #i...

能饮一杯否 246

【转】并查集(4)--POJ 并查集 题目汇总 ——czyuan原创

继续数据结构的复习,本次的专题是:并查集。       并查集,顾名思义,干的就是“并”和“查”两件事。很多与集合相关的操作都可以用并查集高效的解决。        两个操作代码:        int Find(int x)        {           if (tree[x].parent != x)           {               tree[

luyumiao1990的专栏 336
上一篇: HDU 3836Equivalent Sets——————Kosaraju求强连通分量
下一篇: SPOJ - GCJ1C09C 释放囚犯 ——————区间dp
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值