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

Xarray实战:从气象数据到可视化分析的完整流程(附Python代码) 本文详细介绍了使用Xarray库处理气象数据的完整实战流程。针对气象领域常见的NetCDF和GRIB格式,文章从数据读取、坐标操作、智能索引、统计计算到高级可视化,提供了完整的Python代码示例。重点阐述了Xarray如何高效处理高维标记数据,帮助地球科学领域的研究人员将繁琐的数据处理工作转化为高效的分析流水线。 阅读详情

原来不理解这题怎么做,今天看了一下题解终于理解了。
本文转载自:POJ 1182:食物链[详细!]

题意:

A,B,C三种动物,A吃B, B吃C,C吃A。有n个动物,他们编号为1~n。
输入:第一行n,k,分别表示动物个数,给出k句话(有真有假)。接下来n行每行一句话,每句的格式为三个整数:d,x,y。x,y为动物编号,d为1时表示x,y是同类,d为2时表示x吃y。
说明:假话有三种: 1) 当前的话与前面的某些真的话冲突,就是假话; 2) 当前的话中X或Y比N大,就是假话; 3) 当前的话表示X吃X,就是假话。
输出:假话的个数。

解析:

一、 relation 的确定

对每一个元素,把它对父节点的关系用数组r[i]表示,即relation,作为权值。
由于数字d指定了后面给出的两个动物的关系:
1) d=1 时, d−1=0 ,x,y是同类;
2) d=2 时, d−1=1 ,x吃y
这个权值不是随便定的噢,且看下面推导~!
因此我们设r[i]包含这三种值,表示动物之间的三种关系:
1) r[i]=0 时, i 与p[i]是同类;
2) r[i]=1 时, i 被p[i]吃;
3) r[i]=2 时, i 吃p[i];
注: p[i]为i的父节点。

二、路径压缩 find_set(x) 的节点算法

我们知道,并查集的集合代表元是一个元素,这里规定集合出现的第一个元素是代表元。
为了使查找效率提高,我们需要使树尽可能低,并查集的路径压缩让它只有一层。
那么怎么把将不是直接联系的两个节点成为父子关系?怎样表明他们之间的关系呢?
这是我们接下来要推导的东西

根据儿子对父亲的关系 r ,和父亲对爷爷的关系r推出儿子对爷爷的关系 r :

           i      j          k
     爷爷  父亲   儿子      儿子与爷爷 
           0      0       0=(i + j)%3  
           0      1       1=(i + j)%3  
           0      2       2=(i + j)%3
           1      0       1=(i + j)%3 
           1      1       2=(i + j)%3 
           1      2       0=(i + j)%3 
           2      0       2=(i + j)%3 
           2      1       0=(i + j)%3 
           2      2       1=(i + j)%3

观察即可知道,儿子对爷爷的关系是k=(i+j)%3。
为啥要这样做?
可以画个图理解下。如:X->Y,Y->Z,要把X的父节点设为Z就需要上述步骤。
需要注意的是,每次更新节点的r[i]时应该先找到父亲节点再更新,否则会因为给出的话是假话而发生错误。

三、集合间关系的确定

初始时候每个元素都是自洽的,那么有几个集合的时候,怎么确定集合(代表节点)之间的关系?
因为只有确定两个集合(的代表节点)之间的关系才能把两个集合合并最后得到一个并查集。

先给出公式: r[ry]=(3−r[y]+(d−1)+r[x])

我们分3个小部分来推导:
(例如,由 Y−>X−>P,Y−>Q ,得到 Q−>P 。我们需要先得到 Q−>X ,再得到 Q−>P )画图更易理解。

(1) 由子对父的关系得到父对子的关系
子对父
0(父子同类) (3−0)%3=0
1(父吃子) (3−1)%3=2 //父吃子
2(子吃父) (3−2)%3=1 //子吃父,一样的哦亲
即 r[爷爷]=(r[子]+r[父])

(2) Q−>X ,把Y接到X上,使Q成为Y的儿子,进而得到Q对X的 relation 权值:
r[Q对X]=(r[Y对X]+r[Q对Y])%3
r[Y对X]=d−1
r[Q对Y]=3−r[Y]
故 r[Q对X]=((d−1)+(3−r[y]))%3

(3) Q−>P ,最后由 Q−>X−>P 得到 Q−>P (得到Q对P的 relation 权值:
r[Q对X]=(r[Y对X]+r[Q对Y])
r[Q对P]=(r[Y对X]+r[Q对Y]+r[X对P])
故 r[Q对P]=((d−1)+(3−r[y])+r[x])

注意:

题目只有一组样例,如果按照多组来输入会WA。

my code

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = (int)5e4 + 10;
int pa[N], r[N];

int ans;
int n, K;

void init() {
    for(int i = 0; i <= n; i++) {
        pa[i] = i;
        r[i] = 0;
    }
}

int find(int u) {
    if(u == pa[u]) return u;
    int pre = pa[u];
    pa[u] = find(pre);
    r[u] = (r[u] + r[pre]) % 3;
    return pa[u];
}

void Union(int x, int y, int d) {
    int root1 = find(x);
    int root2 = find(y);
    if(root1 != root2) {
        pa[root2] = root1;
        r[root2] = (3 + (d - 1) + r[x] - r[y]) % 3;
    }else {
        if(d == 1 && r[x] != r[y])
            ans++;
        else if(d == 2 && (3 - r[x] + r[y]) % 3 != 1)
            ans++;
    }
}

int main() {
    int x, y, d;
    scanf("%d%d", &n, &K);
    init();
    ans = 0;
    while(K--) {
        scanf("%d%d%d", &d, &x, &y);
        if(x > n || y > n) {
            ans++;
        }else if(d == 2 && x == y) {
            ans++;
        }else {
            Union(x, y, d);
        }
    }
    printf("%d\n", ans);
    return 0;
}
【一文读懂】卫星轨道的轨道参数(六根数)和位置速度矢量转换及其在终端距离、相对速度和多普勒频移计算中的应用 本文首先介绍了卫星轨道的六根数参数:半长轴 a、偏心率 e、轨道倾角 i、升交点赤经 Ω、近地点幅角 ω 以及真近点角 ν,并探讨了如何利用这些参数计算卫星与地面终端之间的距离、相对速度及由此产生的多普勒频移。利用开普勒运动公式计算当前瞬间的轨道半径;根据真近点角 ν 在围心坐标系中计算位置矢量和速度矢量;利用旋转矩阵(依次旋转 ω、i、Ω)将围心坐标系的状态矢量转换到地心惯性坐标系;最终结合地面终端信息,计算卫星与终端的欧氏距离、沿视线的相对速度及多普勒频移。 阅读详情

相关推荐

头歌 操作系统 课堂练习2.1:外部中断 第2关:第一次时钟中断

将答案0x796c输入到workspace/mushixun/恢复点的地址.txt中的括号里即可,随后使用kill命令防止对第三关的环境造成影响。

Yinfrey的博客 6086

(带权并查集)POJ1182 食物链

POJ1182 食物链 思路: 因为题目给的相对关系,所以可以用带权并查集做。 权值:0表示x和y是同类,1表示x吃y,2表示x被y吃。 那么在路径压缩的时候,我们得到w[a->c]=(w[a->b]+w[b->c])%3。在区间合并的时候w[t1]=(-w[x]+w[y]+w-1)%3。在判断关系的时候比较w-1和(w[x]-w[y]+3)%3,+3是为了避免负数,w-1是因为...

Z7784562的博客 194

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 403

POJ 1182 食物链 【带权并查集 (种类并查集)】

HDU 3038 How Many Answers Are Wrong 比较经典的带权并查集,能让你真正理解带权并查集: 诠释是这样的:在对并查集进行路径压缩和合并操作时,这些权值具有一定属性,即可将他们与父节点的关系,变化为与所在树的根结点关系。也就是说,权值代表着当前节点与父节点的某种关系(即使路径压缩了也是这样),通过两者关系,也可以将同一棵树下两个节点的关系表示出来。 具体思路: 话不...

指弹键盘哼民谣 506

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1383

E - 食物链 POJ - 1182(带权并查集,有图解)

E - 食物链 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...

石旭先森的博客 367

Stanford CS230深度学习(一)

斯坦福CS230可以作为深度学习的入门课,最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接,然后给出第一课的理解和编程作业的代码。 所有资料如下: 一、课程连接: b站课堂讲授版:Stanford CS230(吴恩达 深度学习 Deep Learning | Autumn 2018)(中英双字幕) (一共10个视频,每周一个,但是每个视频对应下面的配套视频较多) Coursera配套视...

weixin_44750583的博客 2381

poj 1182 食物链(带权并查集)

题目链接:poj 1182 食物链 题目大意:略。 解题思路:带权并查集的裸体,每个点除了记录前一个点以外,再多记录下和前一个点的关系。 #include #include const int N = 1e5+5; int n, k, f[N], v[N]; int getfar(int x) { if (x != f[x]) { int tmp =

不慌不忙、不急不躁 1111

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

CMake+Visual Studio2022搭建C++环境

小鱼酱的博客 4971

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

【POJ】1182 - 食物链(带权并查集,单数据)

食物链 Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64u Submit Status Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。  现有N个动物,以1-

wyg1997 1345

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 764

POJ1182 食物链 (带权并查集)

POJ1182 食物链 (带权并查集)   一看见这道题就想到了并查集,但是普通的并查集根本行不通,因为通过普通的并查集我们只能得出两个元素是否在同一个集合与把两个集合合并为一个集合,这道题既有种类之分,各个种类之间还有同类、吃、被吃的关系。限时训练结束后学长说这道题用带权并查集,百度了n个博客,才有了点头绪。   首先,带权并差集比普通的并查集多了一个权值(关系),普通并查集只用了一个pre数组...

GYH0730的博客 541

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

题目链接:POJ 1182 食物链 没学带权并查集时候做过一次这个题,当时没做出来,kanletiji

fobdddf的专栏 1036

pscad IEEE标准系统搭建说明

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

POJ1182 -- 食物链 (带权并查集经典例题)

POJ1182 – 食物链 (带权并查集经典例题) 【题目链接】 题目 食物链 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是”1...

xuziling_的博客 293

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

参考博客:POJ-1182 食物链思路:经典的带权并查集。除了并查集那个数组外,多开一个权值数组,或者把两个合成一个结构体数组。权值为每个点与根节点的关系//0:同类 1:吃 2:被吃。图一:路径压缩 图二:合并操作图三:a和b相对关系//#include #include #include using namespace std; const int MAXN = 50005; int n, m

张松超的博客 424

【带权并查集】POJ1182 [NOI2001]食物链

题面在这里这是一道经典的带权并查集例题。 我们定义权值s[i]表示节点i与根的关系: 0:和根是同一种动物 1:i能够吃根节点 2:i被根节点吃 这样定义的好处就是,在模3的意义下,各个节点之间的关系能够传递 (接下来本题解所讨论的范围都是在模3的意义下) 例如: 这样我们的权值s[i]就能满足一维向量加法了。那么很显然,s[i]也满足一维向量减法: a与b的关系就是s[a

linkfqy 1638

Poj 1182 食物链 —— 带权并查集

This way 题意: 动物王国中有三类动物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个动物,用上述两种说法,一句接...

天翼之城的博客 363

POJ 1182 食物链 带权并查集

http://poj.org/problem?id=1182 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2...

xiji333的博客 230

POJ 1182 食物链 【带权并查集】

  题目链接:http://poj.org/problem?id=1182 题意:A能吃B,B能吃C,C能吃A,输入几个说法,D = 1,则 x 和 y 是同类,如果D = 2,则x 能吃 y;说法有多个,问有几个说法是和前面说过的说法相矛盾的; 这道题有两种解法,第一种解法是在《挑战程序设计》里面有提到的,还有另一种是在博客看到的,先看第一种; 开3*N的数组空间, 1到N,表示的是N个...

Y390d的博客 219

poj-1182-食物链 【 带权并查集 】 题解

目录1.题目2.题意3.思路4.代码 1.题目 动物王国中有三类动物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句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假

林深不见鹿 的博客 1213

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个动物,用上述两种说法,一句接一句地说出K句话...

Happig的博客 1995

食物链 【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个动物,用上述两种说法,一句接一句地说出K句...

qq_41925919的博客 162
上一篇: hdu 3973 AC's String(字符串hash+线段树单点修改)
下一篇: CodeForces 19D Points(线段树单点修改+离散化)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值