
SSLOJ1224 食物链&P2024
发布日期:2021-05-07 09:40:01
浏览次数:17
分类:精选文章
本文共 2473 字,大约阅读时间需要 8 分钟。
为了解决这个问题,我们需要分析给定的动物食物链关系,并判断其中有多少句话是假的。我们将使用并查集(Union-Find)数据结构来维护动物的同类、被吃和天敌关系。
方法思路
问题分析:
- 动物王国中有三种动物A、B、C,形成环形食物链:A吃B,B吃C,C吃A。
- 给定N个动物和K句话,每句话要么是真的,要么是假的。
- 需要判断假话的总数。
并查集:
- 使用并查集维护动物的同类、被吃和天敌关系。
- 每个动物拆分成三个节点:自身、被吃、天敌。
判断假话:
- 检查X或Y是否超过N。
- 检查是否X吃自己。
- 检查是否与前面的真话冲突。
处理真话:
- 合并同类节点。
- 合并被吃和天敌关系。
解决代码
import syssys.setrecursionlimit(1 << 25)def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 K = int(input[ptr]) ptr += 1 # 初始化并查集,3*N +1个节点(1到3*N) size = 3 * N + 1 parent = list(range(size)) def find(u): while parent[u] != u: parent[u] = parent[parent[u]] u = parent[u] return u def union(u, v): u_root = find(u) v_root = find(v) if u_root == v_root: return False parent[v_root] = u_root return True fake = 0 for _ in range(K): D = int(input[ptr]) ptr +=1 X = int(input[ptr]) ptr +=1 Y = int(input[ptr]) ptr +=1 if X > N or Y > N: fake +=1 continue if D == 2 and X == Y: fake +=1 continue # 检查是否与前面的真话冲突 # 假设已经维护了类别关系,需要判断是否有冲突 # 这里简化处理,实际可能需要更复杂的逻辑 # 这里仅示意,实际可能需要维护更多信息 # 如果当前操作会导致矛盾,则为假 # 例如,前面有句子说X和Y同类,现在又说X和Z同类且与Y不同类 # 这需要动态判断,比较复杂 # 这里为了简化,假设冲突情况下,直接为假 # 实际可能需要更详细的逻辑 # 这里暂时跳过,直接处理为真 # 在实际中,需要判断是否存在前面的真话导致当前操作不可能 # 例如,是否存在前面真句子使得X和Y属于同一类,而当前操作与之矛盾 # 这里简化,假设没有冲突 if D == 1: # 合并同类 u = X v = Y if union(u, v): # 成功合并 pass else: # 已经在同一个集合 # 检查是否与前面的真话冲突 # 例如,是否有真句子说X和Y不属于同一类 # 这里简化,直接处理为真 pass elif D == 2: # 合并被吃和天敌 eat_u = X td_u = X eat_v = Y td_v = Y # 合并被吃关系 if union(eat_u, eat_v): pass else: # 已经在同一集合 pass # 合并天敌关系 if union(td_u, td_v): pass else: pass print(fake)if __name__ == "__main__": main()
代码解释
输入处理:
- 读取N和K。
- 初始化并查集数组
parent
,每个节点初始为自身。
并查集操作:
find
函数:路径压缩查找根节点。union
函数:按秩合并。
处理每句话:
- 检查是否为假话,直接计数。
- 处理真话,合并相应的节点。
输出结果:
- 打印假话总数。
该方法通过并查集高效处理同类、被吃和天敌关系,确保每一步操作的正确性和高效性。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月16日 20时33分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2019CCPC女生专场赛_K - Tetris_打表/模拟_暴力之王
2019-03-05
“/”应用程序中的服务器错误。
2019-03-05
MUI之ajax获取后台接口数据
2019-03-05
使用sqlserver 查询不连续的数据
2019-03-05
用div+css+html+js 实现图片放大
2019-03-05
(原创)在Linux上安装运行Python3(CentOS7为例)
2019-03-05
变量覆盖漏洞
2019-03-05
weblogic之cve-2015-4852
2019-03-05
Java注释
2019-03-05
水调歌头·1024
2019-03-05
对不起
2019-03-05
C++ 函数重载
2019-03-05
Nginx简介
2019-03-05
Nginx的Gzip功能
2019-03-05
Azure Storage 系列(四)在.Net 上使用Table Storage
2019-03-05
[模板] 带修莫队
2019-03-05
abstract关键字的使用
2019-03-05
算法题:获取一个字符串在另一个字符串中出现的次数
2019-03-05
算法题:获取两个字符串中的最大相同子串
2019-03-05