100+80+30=210
T1:很容易看出是棵树
求出最长距离,深搜一下
如果一个点是叶子节点
暂时在它与它父亲那条边上放陷阱直到与根节点的距离达到最大值
如果是父亲节点
由于一个节点与它父亲的边上的陷阱可以影响这个点的所有儿子
也就是说我们可以在i与i的父亲的那条边上放陷阱来减少i到i的儿子的边上的陷阱数
但放太多会使某些点距离大于最大值
求个min就好。
T2:
一眼状压
但是2^15*10000会爆掉,没法DP
所以打了两个状压宽搜,从起点到终点和从终点到起点
其实差不多,都是部分分
打着打着打不下去
忽然看出求答案的过程只与起点,k个点,终点有关
我们把它们剥离出来,做k+2遍最短路,求出两两之间的最短距离
然后两次状压宽搜(第一个求起点到终点,第二个求终点到起点)
第一个的初值是f1[1,0]=0
第二个的初值是f2[k+2]=f1[k+2]
要开int64
要开int64
要开int64
一开始打的int64,后来想了一下可能会时超
如果它不卡你可以开longint
但它卡了
而我在最后一分半钟交了longint
100->80
T3:
二叉字典树(二进制,31层)
沿着走
如果只有一个子节点就走
否则,如果风水值这位为1,就走0,否则走1
字典树记录一下编号,输出即可
已AK