2016.10.06
//貌似是bzoj十连测???orz。。。I know nothing about it.
(T1)master(100/100):我直接二分了QAQ......题解是暴力+贪心,,好有道理的样子......还有人用dp,不明觉厉
(T2)tour(70/100):70%:O(n^3),我的做法是先预处理出每个节点的度,然后枚举前三个点,可用O(1)时间算出第四个点可行的方案数,不会重复算。对于这种sb的方法竟然给了70%的数据,窝真是内牛满面T_T
100%:O(n^3/32),看了看题解,100%的做法是在70%的基础上加以优化。枚举a->b->c->d中的b,c两点,ans=(du[b]-1)*(du[c]-1)-sum,sum表示经过b,c的三元环个数。也就是说若可以用O(1)时间计算出每个b,c的sum,那么就能愉快地A了。我们只要知道同时连向b,c的点的个数就行了,题解说用压位即可(然而salt fish并不谁压位,马上去补orzz)
(T3)walk(20/100):20%:(这题实力大滚粗,我也不知道怎么就得了20分)
40%:预处理+bfs水过
80%:(zyf的nb解法)每个节点只能bfs一遍。于是维护一条链表,每次顺序访问链表中的点,看是否能与当前点联通。每bfs一个点就从链表中删去。。。(考试时候因为忘了对拍程序怎么写于是不敢写链表orrrz)
70%:val<=2^15。(这是题解给出的做法,非常有启发性!)先把m条边建好。考虑新增的2^15个点(全部入图),每个点向它的子集连一条权值为0的边。每个点i向自己的val[i]连一条权值为1的边,每个val[i]向i连一条权值为0的边,然后跑一遍bfs。时间复杂度为O(2^15+n+m)。
100%:val<=2^30。我们知道"&"具有传递性,又因为val到val的边权值为0,跑的边数并不影响最终的结果。于是我们建边时只需建比val缺一位1的val,这样边数就大大减少了WAW