随笔分类 -  拓扑排序

摘要:对反串建SAM弄出后缀树,每个b串通过倍增定位其在后缀树上对应的节点,根据其长度将节点拆开。然后每个a串也找到对应的节点,由该节点向表示a串的节点连边,再把所给的边连上跑拓扑排序即可。 阅读全文
posted @ 2019-05-05 20:23 Gloid 阅读(220) 评论(3) 推荐(1) 编辑
摘要:先考虑80分做法,即满足A串长度均不小于B串,容易发现每个B串对应的所有A串在后缀数组上都是一段连续区间,线段树优化连边然后判环求最长链即可。场上就写了这个。 100分也没有什么本质区别,没有A串长度不小于B串的性质后,区间连边变成了矩形连边,用主席树或KDTree优化连边即可,当然主席树会更靠谱, 阅读全文
posted @ 2019-04-09 21:02 Gloid 阅读(307) 评论(0) 推荐(0) 编辑
摘要:线段树优化建图暴力拓扑排序即可。对于已确定的数,拓扑排序时dp,每个节点都尽量取最大值,如果仍与已确定值矛盾则无解。叶子连出的边表示大于号,其余边表示大于等于。 阅读全文
posted @ 2019-01-18 10:56 Gloid 阅读(271) 评论(0) 推荐(0) 编辑
摘要:跑一遍dij根据最短路DAG进行拓扑排序,按拓扑序dp即可。wa了三发感觉非常凉。 阅读全文
posted @ 2018-11-08 19:34 Gloid 阅读(178) 评论(0) 推荐(0) 编辑
摘要:首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T)。同时建出最短路DAG,这样图中任何一条S到T的路径都是最短路径,对于条件二就只需要判断A是否能走到B。注意到空间开的非常大。那么对于条件二的可达性显然是可以b 阅读全文
posted @ 2018-11-07 17:32 Gloid 阅读(211) 评论(0) 推荐(0) 编辑
摘要:考虑在每个点的出边中删除哪些。如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的。于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可。 阅读全文
posted @ 2018-10-31 10:58 Gloid 阅读(207) 评论(0) 推荐(0) 编辑
摘要:DAG中每个点选一条入边就可以构成一棵有向树,所以如果没有环答案就是∏degreei。 考虑去掉含环的答案。可以看做把环缩点,剩下的点仍然可以任意选入边。于是去除的方案数即为∏degreei/∏degreek,k为环上点。 环相当于考虑新加入边的终点到起点的所有路径。设f[i]为i为起点的所有路径提 阅读全文
posted @ 2018-10-20 01:47 Gloid 阅读(182) 评论(0) 推荐(0) 编辑
摘要:发现所谓半连通子图就是缩点后的一条链之后就是个模板题了。注意缩点后的重边。写了1h+真是没什么救了。 阅读全文
posted @ 2018-07-29 16:37 Gloid 阅读(234) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示