牛客
NeverMakeIt
这个作者很懒,什么都没留下…
展开
-
牛客 NC201908 小睿睿的伤害(dsu on tree, 启发式合并)
传送门题目大意 给你一棵树,每个节点有一个权值valvalval,每一对点对(i,j)(i,j)(i,j) 可以在他们的lcalcalca处造成gcd(val[i],val[j])gcd(val[i],val[j])gcd(val[i],val[j])的伤害,问对于每一个点,点对对它造成最大的伤害是多少,以及造成最大伤害的点对的数量。解题思路 这道题一个比较好想的做法就是暴力,我可以暴力枚举点对计算其在lcalcalca处的贡献(复杂度O(n2)O(n^2)O(n2)),同时我也可以对每个点暴力原创 2020-08-25 13:58:27 · 431 阅读 · 0 评论 -
牛客 NC205089 牛妹的苹果树(LCA,树的直径,ST表)
传送门题目大意 在一颗树中,询问给定区间内所有点对的最大距离。解题思路 该题主要利用了一个性质:如果一个集合内距离最大的点对为(a,b)(a,b)(a,b),另一个集合内距离最大的点对为(c,d)(c,d)(c,d)那么这两个集合合并后,距离最大的点对一定在a,b,c,d这四个点中。这样相当于我们知道了如何合并子问题,接下来就是解决区间查询的问题了。用线段树或者RMQ都没问题。代码实现在合并两个子问题时需要查询两点之间的距离:dis(u,v)=dis(root,u)+dis(root,v)−原创 2020-08-23 18:23:59 · 116 阅读 · 0 评论 -
牛客 NC209881 名作之壁(单调队列)
传送门题目大意 给定一个序列,求有多少个区间满足区间最大值减区间最小值大于k。解题思路 可以从反面入手来解决这个问题,就是把答案变成区间个数减去区间最大值减最小值小于等于k的区间个数,求后者我们可以通过枚举区间的右端点找区间左端点有多少种可能的情况,然后累加起来就行了。我们可以发现如果区间[l,r][l,r][l,r] 满足题意那么区间[l+1,r][l+1,r][l+1,r]也满足题意,所以我们只要对每一个rrr 求出最左边的lll 使[l,r][l, r][l,r]满足题意,那么右端点为rr原创 2020-08-22 23:47:33 · 236 阅读 · 0 评论 -
牛客 NC20893 赞迪卡之声妮莎与奥札奇(无向图删边,博弈论)
赞迪卡之声妮莎与奥札奇(无向图删边,博弈论)传送门题目大意 给一个无向完全图,甲乙两人在玩删边游戏。规则是,从一号点出发,甲先手,挑选一条边前进,并且把这条边删除,乙再选一条边前进,再把这条边删除。两者轮流进行直到一个人无法选边前进,判定该人失败。问甲乙两人都按照最佳方式操作,谁必胜。解题思路 这个题利用了完全图的一种对称性质,下面将以四个点的情况对这种对称性做出具体解释。四个点的完全图在逻辑上更类似于一个四面体而不是一个正方形,因为在正方形中对角线和四条边并不是等价的,但在四面体中这六条边位原创 2020-08-20 00:31:30 · 497 阅读 · 0 评论