[SDOI2017]天才黑客
考虑拆边为点\((in_i \to out_i)\ in\ c_i\)
考虑点的贡献,将一个点周围一圈的边均连边,其代价为 \(LCP(S_i,S_j)\).
但发现这样连边数高达 \(O(M^2)\) .
发现实际上本质不同 \(LCP\) 只有 \(O(M)\) 个,考虑 \(LCP\) 是 \(trie\) 上的 \(LCA\) 即可。
完全可以建出虚树,按 \(dfn\) 序排序,实际上即是区间内的 \(dep\) 最低点。
那么完全可以使用前缀/后缀优化建图,这样只需要连\(O(M)\)边即可。
接着使用 \(dij\) 算法求最短路即可。