文章

P2024 [NOI2001] 食物链 题解

题目描述

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

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

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

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

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

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

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

思路

这道题显然是并查集,那么我们需要考虑的是如何在并查集中把同类/不同类表示出来。如果我们将同类的合并到一个并查集里,不同类的不在同一个并查集,那么我们就无法记录不同类之间的关系。如果将不同类合并到一个并查集中,同类的也合并到一个并查集中,其中在并查集里它们有一定的次序,就可以解决以上问题了。

具体过程

当指令给出 $X$ 吃 $Y$ 时,我们就把 $X$ 指向 $Y$ 。不难发现,如果这些关系形成了一棵树或一条链,也就是从下到上下面的吃上面的,就会构成一个循环:每差三个就是一个同类。

当给出两者是同类的关系时,说明我们需要将两者合并到一个并查集中。但是不能乱合并,我们也需要体现出其中的层次关系。只需要让这两个同类合并后深度差三即可。所以找到合适的位置再合并就行了。




附:圆锥、球体体积推导

圆锥

一个圆锥可以看作是一个直角三角形绕直角边旋转一周的结果。同样的,我们如果用柱体的眼光看待,它就是大小渐变的圆堆积而成的物体。这么一来,我们就可以使用积分求出它的体积了。

如图,我们可以把圆锥进行“切片”操作。

截屏2022-10-16 17.23.30.png

对于每一个圆的半径,我们可以用相似三角形求解。

截屏2022-10-16 17.25.27.png

如图,我们假定圆锥的高度为 $h$ ,底面半径为 $R$ ,那么对于一个到顶点距离为 $x$ 的圆,它的半径 $r$ 就是 $R \times \frac{x}{h}$ 。对于 $x \in [0,h]$ ,我们将这些面积进行积分。

对于每一个圆的面积:

\[f(x)=\pi \times (\frac{R}{h} \times x)^2=\pi \times \frac{R^2}{h^2} \times x^2\]

要求:

\[\int_{0}^{h} f(x)dx = F(h)-F(0)\]

而:

\[F(x)=\pi \times \frac{R^2}{3h^2} \times x^3\]

故最终的答案为:

\[F(h)-F(0)=\pi \times \frac{R^2}{3h^2} \times h^3=\frac{1}{3} \pi R^2 h\]

球体

我们把上面的思路变换一下,将球体切片成大小不一的圆形。对于到圆心距离为 $x \in [-R,R]$ 的圆的面积可以表示为:

\[f(x)=\pi (\sqrt{R^2-x^2})^2=\pi R^2- \pi x^2\]

积分一下:

\[F(x)=\pi R^2 x - \frac{\pi}{3}x^3\]

求得体积:

\[\int_{-R}^{R}=F(R)-F(-R)=(\pi R^2 \times R - \frac{\pi}{3}R^3)\times 2=\frac{4}{3}\pi R^3\]
本文由作者按照 CC BY 4.0 进行授权

© Dignite. 保留部分权利。 由  提供CDN加速。

浙ICP备2023032699号 | 使用 Jekyll 主题 Chirpy