摘要: 二分图+矩阵求逆 既然我们考虑b能替换哪些a,那么我们自然要得出b被哪些a表示,这里我们设一个矩阵C,那么C*A = B 为什么呢?直接A*C = B是不可行的,因为都是行向量,不能直接乘,那么我们转置一下,得出At*C=Bt,这样就很科学了,那么再转回来,A*Ct=B,于是Ct=B*A^-1那么矩 阅读全文
posted @ 2017-11-28 20:12 19992147 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 最短路+最小生成树 因为所有东西都只跟加油站有关,那么我们只留加油站就行了。 先预处理出每个点到加油站的最短距离,这个用多源最短路,就是把所有加油站放到堆里,然后就是重构图,我们不用直接连边,计算出每条边的贡献,然后跑最小生成树,这里直接离线查询就行了。 #include<bits/stdc++.h 阅读全文
posted @ 2017-11-28 20:04 19992147 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 拓扑排序+set 如果我们直接记录所有路径是不行的,那么我们要降低路径的数量,于是我们把最短路径转换到边上,这样我们就只有m条路径了。 先计算出f[i]和g[i]表示正反拓扑最长链,把所有g插到set里,然后按照拓扑序依次枚举删点,把之前加入过的边删除,删除g[u],查询最大值,然后加入后继边每条边 阅读全文
posted @ 2017-11-28 19:58 19992147 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 动态电分治+二分 肯定要枚举所有点对,那么我们建出点分树降低树高,然后每个点存下点分树中所有子树到这个点的距离,然后二分+lower_bound就行了。 #include<bits/stdc++.h> using namespace std; const int N = 2e5 + 5; names 阅读全文
posted @ 2017-11-28 19:50 19992147 阅读(181) 评论(0) 推荐(0) 编辑