上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 41 下一页
摘要: 传送门 因为要随机删除一条边,而枚举所有边肯定会超时,经过发现,先求出一遍最短路,而要删除的边肯定在最短路径上,删除其他的边对最短路没有影响。 所以可以先求出最短路,再枚举删除最短路上的每一条边再求最短路。 ——代码 1 #include <queue> 2 #include <cstdio> 3 阅读全文
posted @ 2017-05-05 16:32 zht467 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 传送门 建图麻烦,建完图搞一遍Floyd就好了。 ——代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 int n, s, a, b; 8 int t, x[401 阅读全文
posted @ 2017-05-05 15:11 zht467 阅读(144) 评论(0) 推荐(1) 编辑
摘要: 传送门 基于Floyd的动态规划原理,我们可以只用进行一次Floyd。 而题目给出的限制条件相当于给Floyd加了时间限制而已。 还是得靠对Floyd的理解。 ——代码 1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std 阅读全文
posted @ 2017-05-05 15:09 zht467 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 传送门 1.最大生成树 可以求出最大生成树,其中权值最小的边即为答案。 2.最短路 只需改变spfa里面的松弛操作就可以求出答案。 ——代码 1 #include <queue> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace 阅读全文
posted @ 2017-05-05 10:45 zht467 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 传送门 来自题解:https://www.luogu.org/wiki/show?name=题解+P3385 1.Bellman-Ford 通过Belman-Ford求出最短路,然后在进行一遍松弛操作,如果可以再松弛说明存在负环,否则不存在。 2.SPFA SPFA有两种实现方法。一个是BFS一个是 阅读全文
posted @ 2017-05-05 09:37 zht467 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 传送门 树链剖分固然可以搞。 但还有另一种做法,可以看出,增加一个节点的权值会对以它为根的整棵子树都有影响,相当于给整棵子树增加一个值。 而给以某一节点 x 为根的子树增加一个权值也会影响当前子树,节点 y 所增加的值为 dis[y] * z - (dis[x] - 1) * z,每个节点都会增加 阅读全文
posted @ 2017-05-05 08:38 zht467 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 传送门 需要把一条路径上除了终点外的所有数都 + 1, 比如,给路径 s - t 上的权值 + 1,可以先求 x = lca(s,t) 类似数列上差分的思路,可以给 s 和 f[t] 的权值 + 1,给 x 和 f[x] 的权值 - 1 最后统计以每个节点为根的子树的和,则每个节点的权值就是子树的权 阅读全文
posted @ 2017-05-04 21:04 zht467 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 传送门 可以看出,三个点两两之间的lca会有一对相同,而另一个lca就是聚集点。 然后搞搞就可以求出距离了。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define MAXN 1000001 5 6 阅读全文
posted @ 2017-05-04 19:03 zht467 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 传送门 水题。 直接倍增求lca。 x到y的距离为dis[x] + dis[y] - 2 * dis[lca(x, y)] ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define MAXN 20002 阅读全文
posted @ 2017-05-04 17:13 zht467 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 传送门 树上的dp,从底向上dp就行。 设dp[u][0]表示不选节点 u 的最大值,dp[u][1]表示选节点 u 的最大值。 则状态转移方程为: dp[u][0] = ∑max(dp[v][1], dp[v][0]) dp[u][1] = ∑dp[v][0] + val[u] (节点v是节点u的 阅读全文
posted @ 2017-05-04 16:12 zht467 阅读(172) 评论(0) 推荐(0) 编辑
上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 41 下一页