图论
树
一棵树的拓扑序个数
以每个点为根(换根dp),那一棵树的拓扑序个数是:
n ! / ( s i z [ 1 ] × s i z [ 2 ] × . . . × s i z [ n ] ) n!/(siz[1]\times siz[2]\times ...\times siz[n]) n!/(siz[1]×siz[2]×...×siz[n])(这里的 s i z siz siz是针对不同的根有的会不同)
经典例题:
小象砍树
最短路径树
这棵树上任意一点到根节点
的距离,都是他们在原图中的最短路
求法非常简单,只需要在板子上加几行就行了
首先记录 y y y的前驱 p r e [ y ] pre[y] pre[y],记录的是边的编号,表示 y y y通过那一条边走来,在更新最短路的时候,更新编号即可
经典例题:
P a t h s a n d T r e e s Paths and Trees PathsandTrees(板子题)
疫情防控(这里面规定了每个点的路径具有唯一性,可以用最小路径树求解,还要树上差分或者树剖+线段树【滑稽】)
拓扑
逆向思维
如果发现按照题意进行拓扑会出错,不妨试一试反着来一遍,说不定会发现新大陆
经典例题:
最优排列
差分约束
基础式子
一定要记住!!
找最短路: a < = b + v a l ( b 连 向 a ) a<=b+val(b连向a) a<=b+val(b连向a)
找最长路: a > = b + v a l ( b 连 向 a ) a>=b+val(b连向a) a