今天比赛—————>暴力欢乐赛
估分:(30 + 0 + 30 + 0 = 60)
考场:(30 + 0 + 30 + 0 = 60)
人家暴力拿满(rank1)(* ̄︶ ̄)
其实人家打了我不会打的暴力(* ̄︶ ̄)
(T1)
很容易想到将询问分块,然后就可以快速求出每个询问的边集。
此时的问题就在于如何快速求答案。
我们考虑用(Kosaraju)算法来计算,由于每个点只会经过一次,所以可以笼统地认为一次求答案是(n^2)的。
但是(O(T*n^2))的时间复杂度仍然会(TLE),所以我们考虑(bitset)优化(大雾
(Kosaraju)算法每个点只会遍历一次,所以我们用(bitset)来存储边集,并且在(dfs)时用(bitset)的自带枚举操作(跑得飞快)
于是乎,这道题就完美(嘿嘿嘿)地解决了。
(T2)
这道题我们先考虑树的情况。
可以将题意转化为原图能用链覆盖所有边且链不重的方案数。
如果链的长度为(1)代表这条边不为环上边,链的长度大于(1)表示在链的两个端点连一条边,成为一个环。
如此我们就可以(DP)转移:(f[x]=h[du[x]]*∏f[son])
(du[x])表示(x)的度数,(h[du[x]])表示那些链可以相连也可以独立的方案数。
关键在于原图可以为仙人掌,如果环有重边答案为(0)。
仙人掌的话我们可以发现环的部分不能有链出现,所以我们把环都删去然后对于每棵树都跑(DP)乘起来即为答案。
(T3)
这道题嘛,感觉一开始的转化很巧,然后接下来的分类讨论也可以可以的。
对于求特征值为(K)的方案数,我们可以转化成求(<=K)的减去(<K)的
我们的问题就是要求特征值(<=X)的方案数。
我们发现,(<=X)的可以一视同仁,(>X)的同理。
所以问题转化成有(X)个(0)和(n-X)个(1),求最后为(0)的方案数。
发现如果存在有连续的((>=2))(0/1),则最靠近中间数的连续数的值即为最终答案。
所以我们可以枚举最靠近中间数的位置,此时中间的数强制设为(0,1,0,1...)这样轮流交换(否则枚举的就不是最靠近的了),我们就知道剩下的数的个数,可以组合数处理答案。
要特判全部是(0,1,0,1,0,1,0...)的情况,这样结果也是(0)。
(T4)
总结
无语了,今天又是(4)道题,而且还是(4)道神仙题。。。
感觉还是要所有分都竟可能拿到吧,加油了只能(泪奔┭┮﹏┭┮)