此题有SAM的单log做法(小优化)
查看原帖
此题有SAM的单log做法(小优化)
557754
Kalenist楼主2024/3/19 22:00

大体思路同题解区中Cyber_Tree的做法,只不过优化了树上结点对应到相同节点时暴力跳倍增的 log\text{log},即用先比较深度(长度)再比较原树上 dfn\text{dfn} 序的方法实现排序的 O(1)\text{O(1)} 比较。用 dfn\text{dfn} 序是因为若用 vectorvector 存边,则儿子原先就是按编号从小到大排序的(否则再 sortsort 即可)。


inline bool rule(int a,int b)
{
    if(pos[a] != pos[b]) return dfn[pos[a]]<dfn[pos[b]];
    if(de[a] != de[b]) return de[a]<de[b];
    return ord[a]<ord[b];//dfn是parent树的dfn序,ord就是原树的
}

2024/3/19 22:00
加载中...