T1
把快读改一改就行了
T2
瞅见状压分挺高就去码状压了,没去想贪心,,,最后30mins回来看的时候也没想到贪心,还在想dp咋整,,,就挺迷
显然应该尽量删‘A’,'P'可以和'P''A'删,'A'只能和'P'删
贪心删'AP',最后删'PP'
有\(O(n)\)的,维护两个变量匹配AP,我打的\(O(n^2)\)暴力删(一傻傻到底)
T3
bitset记录祖先,每次\(O(k^2)\)判断两个串是否互相继承,以及是否有公共祖先
这个,,,复杂度\(O(\frac{n^2k^2}{32})\)
这个复杂度看起来很假,想卡的话,,,就让它每次\(O(k^2)\)判断的时候不存在不合法情况,弄个内向树
正解的话,如果一个串a被一个串b继承了,那么a不仅没用,还会造成\(O(k^2)\)判断
还是刚才的思路,每次按照声明的顺序排序,并把所有的祖先并到一个bitset上标记
如果当前的点被标记了,直接跳过,否则判断它的祖先和之前的祖先是否有交
\(O(n^2\log n)\)
T4
有个显然的结论,若点x在\(k-degree\)子图里,那它必在\((k-1)-degree\)子图里,于是就可以每次删点
除去度数为0的点,当k=1时显然是全集
从1枚举k,每次边统计答案,边把在当前\(k-degree\)子图中度数为k的点加入队列
然后将它们删掉,并使与其相连的点度数--,度数为k就再加入队列,直到队列空
复杂度好像也很假