[Look-back] 模拟赛 T3 暴露的思维问题

[Look-back] 模拟赛 T3 暴露的思维问题

这是一个非常简单的题目,我也想到了正确的思路,但是由于后来发现原先的思路中有一个问题,我完全抛弃了原来的方法,没有再考虑这个性质。

Log

此题可待成《追忆》
怎么又是这个玩意,有向无环图的后继?
不过,这个题还是不同的,说不定有好的做法。
考虑按位,这个题目的意义还是很明确的
考虑链的情况容易用 Trie 做,考虑树的情况用启发式合并可做。
2000 的可以直接拿 Trie 做。
60pts
一个点,的所有后继,假设已经算出答案为 a_i&a_j,那么
这个点的后继中其实还可能有一些没有利用的数(这是因为高位只有它一个),
但是至多有 log V 个。
我的新点的答案其实就是在这些数中取即可,用 Trie 就能解决了。 
额,不对,可能有更多,凡是因为只有一个而被排除,但是那一位本身是 1 的
,可能都需要上传。不过这样也只有 log V 个。<-------- Point
不对,这个 Trie 的做法有问题,如果没法再走 1 的那边,也不能排除
这个数。这不是异或。也就是说可能是 nlogV 单次的。
那么我们重新考虑链:
如果我们把答案的一个原先的高位 0->1,那么这个操作
要么是匹上了之前留下来的一个 1 那边的,要么是替掉了
0 那边那个,这个操作倒是容易,应该是 log。
考虑树: 树上启发式合并,用上面的策略应该没问题。
还是不对。不过,我们考虑用 bitset 优化这一过程
维护一个 mask 表示当前可选集,s[bit] 表示有哪些数第 bit 位是 1
然后我们 nlog V/w  的时间解决一个,反正 2000 还行。 
我们考虑加一个数,我们扫描那些之前求解的时候被抛弃、没有合并的位
(额外记录这些位如果合并了,那么剩下的一个是什么) 
如果现在可以合并了,那么显然也不需要继续计算了,因为就确定了两个数
那么加入一个数的时间是可控的。这样也许能得 60分。

虽然 Point 处的做法是错误的,但是修正做法之后并没有使得这个性质不满足。在发现错误之后,我没有认真分析复杂度就抛弃了”删除不可能的数“这个想法——因为我认为删除不可能的数这个过程的复杂度似乎就很高,而且没有分析实际上会留下多少数。

posted @ 2025-08-31 19:36  haozexu  阅读(8)  评论(0)    收藏  举报