20260522

A - CQOI2014 排序机械臂

题意:有 nnn 个物品,每个物品有一个高度(可能相同)。排序过程:第 iii 次操作(iii 从 1 到 nnn)时,找到当前序列中第 iii 低的物品(相同高度按初始顺序保持稳定)所在的位置 PiP_iPi,然后将区间 i,Pii, P_ii,Pi 翻转。你需要输出每次操作前的 PiP_iPi。n≤105n \le 10^5n≤105,高度 ≤107\le 10^7≤107。


可以直接使用平衡树,比如 FHQ-Treap。查询最值位置,以及类似文艺平衡树的操作。

B - TJOI2007 小朋友

题意:有 NNN 个小朋友(1≤N≤2001 \le N \le 2001≤N≤200),MMM 对矛盾关系(无向边)。矛盾图满足性质:图中不存在长度超过 333 的环(即所有环的长度均为 333 或更小,等价于无长度 ≥4\ge 4≥4 的环)。求最多能选出多少个两两之间没有矛盾的小朋友,即求该图的最大独立集的大小。


不会有超过 333 个点的环,那么它图形一定是类似于若干颗树,在它的旁边连边,形成 333 个点的很多个环,且这旁边的边不能相交(不然就会形成超过 333 个点的环)。

其实本质上相当于求一个最大独立集,想办法将环的矛盾关系变成一个二分图。

这显然是不可能的,对于一个 333 个点环,无论如何黑白染色,都不可能使任意两条边两边的颜色不等。

用网络流解可能不大行,但是对于一般图而言也有 "总点数 = 最大独立集 + 最小点覆盖"。

所以说,只要能在这个类似树的结构中求出最小点覆盖就可以了。

首先,树与树之间互不影响,答案累加即可。对于一颗树(是一个生成树,旁边的边类似虚边,不表示父子关系)而言,对于一个点的连边而言,祖先连过来的实边只有一条(父节点那条),虚边最多也只会有一条(只会出现在有环时)。


后来听说可以圆方树,发现貌似就是板啊。

建出圆方树后,用 dp 求解。

对于方点,则用 dpi,0/1dp_{i,0/1}dpi,0/1 表示这个方点是周围的原点否存在原点被选。

对于圆点,则用 dpi,0/1dp_{i,0/1}dpi,0/1 表示这个圆点是否被选。

转移较为容易,这样是 O(n+m)O(n+m)O(n+m),n≤200n\le200n≤200 ?!

C - ZJOI2011 道馆之战

题意:有一棵 nnn 个节点的树,每个节点有两个区域 A 和 B,每个区域是冰面(.)或障碍(#)。挑战者从节点 uuu 出发,只能沿着 uuu 到 vvv 的唯一路径向 vvv 移动,移动规则为:每次可以移动到路径上下一个节点的同一区域,或停留在当前节点切换到另一区域(前提是目标区域为冰面且未经过)。每个冰面只能经过一次。起点可选择 uuu 的任意冰面。求从 uuu 出发到 vvv 能经过的最多冰面数。若 uuu 的两个区域都是障碍,输出 000。需要支持两种操作:修改某个节点的两个区域,或回答查询 Q(u,v)Q(u,v)Q(u,v)。n≤50000,m≤100000n \le 50000, m \le 100000n≤50000,m≤100000。


先考虑没有修改操作,如果都是 ..,则走的形状是一个类似螺旋的,当走的次数为奇数,需要改变位置(也就是原本在左边的要变成右边,右边变左边),否则不变。由于有障碍物的限制,相当于在某个位置必须走左边或者右边。

对于一次查询,相当于查找在哪个位置第一次是得原本从左边或右边出发都不满足。由于又有修改操作,所以可以用树链剖分。对于线段树中的一个段,可以记录,假如一开始从左边出发,最后是在哪个位置(假如走不到,就记录一下终止位置),反之同理,正反都要记录一下,因为有一部分是往父节点方向走的。修改,直接在线段树它所在的位置修改就可以了。


后来对拍的时候才发现,理解错题意了,它是求最多能走多少个格子。但是基本上也是一样的,改成用 dis0/1,0/1dis_{0/1,0/1}dis0/1,0/1 表示由 左/右 走到 左/右 的最大数量,同样的反着的也要求。

相关推荐
折哥的程序人生 · 物流技术专研5 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
想吃火锅10057 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
云絮.8 小时前
数据库操作
数据库·mysql·算法·oracle
小林ixn8 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫8 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
菜鸟‍10 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时11 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min11 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
liulilittle12 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
weixin_3077791312 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例