17.11.04

    • 模拟考试
      • Prob.1(只AC了两组

简化问题后:给出不超过20个50位以内的二进制数,问是否存在某些数的异或值等于输入的数。

解法:

1).暴力搜索每种情况(诶,我怎么连搜索都打错了???)

2).for循环枚举每种选法,看是否存在一种选法的异或值等于目标值

然后有一个小技巧:

对于每个枚举到的集合S,不需要把每一个出现的元素再重新提出来相异或。因为是从小到大枚举,且最后的异或值与异或的顺序无关,所以只需要把S这个01串减小一个“1”(就去掉lowbit对应的那个“1”吧),这样得到S的一个子集S',然后O(1)转移就好了。

但是这个复杂度是k(多组)*107级别的。

大米兔大佬不甘忍受如此高的复杂度,于是他大发神威,写了一个线性基(咸腥鸡)来处理这个问题。于是这个就变成咸腥鸡裸题了,他说复杂度是小得多。(他科普了一下,真的学不来,就先记下来了。)

    • Prob.2(AC)Tarjan求强连通,裸裸裸
    • Prob.3(AC)最小生成树后,跑两个dfs求以每个点作为根时整棵树的代价,用到“转根”小技巧。
原文地址:https://www.cnblogs.com/zj75211/p/7784344.html