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[ 阅读详情

相关推荐

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

并查集:POJ 1182 食物链 复习

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

豆子 178

端侧部署与优化:让 AI 真正走进现实生活的关键技术

AI 的开发流程分为 “训练” 与 “推理” 两大阶段。在训练阶段,科研人员依托云端海量数据和高性能 GPU 算力,构建出精度优异的 AI 模型 —— 比如能识别 1000 种物体的图像分类模型、能理解人类语言的自然语言处理模型。但这些在云端 “战绩斐然” 的模型,若直接应用到现实场景中,却会面临三大 “落地困境”。从云端到端侧,从模型压缩到硬件适配,端侧部署与优化技术解决了 AI 落地的核心难题,让 AI 不再是实验室里的 “高精尖技术”,而是融入日常生活的 “实用工具”。

m0_63477749的博客 1052

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

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

qq_36782366的博客 241

【Collibra 驱动 IPD 数据血缘治理】:三层图谱分层展示体系与全链路追踪的技术业务实践

(应用级/数据级/字段级)是理解复杂数据流动的核心手段。其价值不仅体现在可视化的直观性,更在于通过。技术保障血缘不可篡改性,进一步提升IPD数据治理的可靠性。,解决了跨层级血缘分析的性能与可用性矛盾。数据血缘图谱要素定义(字节跳动/腾讯云/信安标委)实现对IPD数据的精准追踪,而数据血缘图谱的。分层交互设计标准(智慧城市数据中台规范)Collibra技术文档(2024)字段级血缘的挑战与解决路径。自动优化血缘路径,并深化。字段级血缘技术实现方案。Collibra通过。图数据库性能优化原理。

百态·数智思维 | 聚焦大数据、量化与未来AI 1244

Ardupilot环境搭建

Ardpilot介绍:ArduPilot通过多种传感器的数据(GPS、加速度计、气压计、磁场计)等来估计飞行器的姿态,从而使飞行器能够保持稳定。

weixin_62387234的博客 2637

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

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

ysugarr 370

公文派2025:免费社区版重大安装更新!

距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。

似最初 1963

POJ并查集小结(转)

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

夏天的风 7020

管理类联考——逻辑——真题篇——按知识分类——综合推理

29、某部门抽检了肉制品、白酒、乳制品、干果、蔬菜、水产品、饮料等﹖类商品共521种样品,发现其中合格样品515种,不合格样品6种。已知: (1)蔬菜、白酒中有2种不合格样品。 (2)肉制品、白酒、蔬菜、水产品中有5种不合格样品。 (3)蔬菜、乳制品、干果中有3种不合格样品。 根据上述信息,可以得出以下哪项? A. 乳制品中没有不合格样品。 B. 肉制品中没有不合格样品。 C. 蔬菜中没有不合格样品。 D. 白酒中没有不合格样品。 E. 水产品中没有不合格样品。 31~32题基于以下题干: 某中学举行田径运

stqer的博客 2022

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8897

带权并查集 向量并查集 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

小程序跳转链接实战:https://wxaurl.cn/、weixin://dl/business/ 跳转与明文 URL Scheme 生成指南

本文聚焦小程序跳转链接开发核心技术,深入解析 https://wxaurl.cn/*TICKET* 与 weixin://dl/business/?t= *TICKET* 两种链接的生成方法。详细阐述生成前的准备工作、服务端接口调用步骤及注意事项,同时剖析 iOS 与 Android 系统在链接适配方面的差异。此外,针对明文 URL Scheme 获取,从平台设置、拼接规则、使用限制等方面展开讲解,并结合实际应用案例提出优化建议,帮助开发者快速掌握小程序跳转链接生成与明文URL Scheme获取的关键技术。

邓邓子的博客 2万+

poj并查集小结

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

wahaha1_的专栏 2125

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

带权并查集模板(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、付费专栏及课程。

余额充值