摘要:
本题容易看出分层的样子 对于i-1来更新i的答案。我们对于更新有两种选择,一种是直接枚举点对更新,一种是用spfa进行o(N*M)更新 我们发现对于两种情况的最坏复杂度情况不同,因此可以进行讨论选择使用哪一种更新、 #include<bits/stdc++.h> using namespace st 阅读全文
摘要:
计算一些数的平均数是否等于一个数,可以等价于将这些数-这个数后计算和是否为0,这样我们可以避免除法运算 为了避免负数,我们将初始可能值-n后+1000,这样只需要知道1000这个位置有没有达到即可。 对于如何扩展,我们对于每个数,都枚举所有能够对他产生贡献的数,并且避免重复的数出现,这样的复杂度是平 阅读全文
摘要:
思路的转换还是比较重要。 虽然本题有两个条件需要控制,但是我们发现第一个条件是根据输入顺序来的,那么就会产生一个猜想,如果边输边做,那么只需要维护第二个条件就可以了。 第二个条件是权值为递增,这个非常像dp中的最长上升子串,但是由于本题是图,所以不能用dp方程做,但是可以借鉴一下。 我们在做dp的时 阅读全文
摘要:
题目告诉我们连通块是一次染色的,因此我们将所有连通块缩点,这样树就变成了黑白相间且与原答案一样的树 对于这种树,我们采用贪心的策略,从树直径不断往外染色,那么染完直径就是答案。 这是因为我们直径上要黑白相间的染,这样对于其他的分支,也会不断地改变,当我们染完直径,其他不可能有比他更长的没被染色 并且 阅读全文
摘要:
显然质数越小越好,越小的质数次方越大越好,写个dfs爆搜一下 #include<bits/stdc++.h> using namespace std; typedef unsigned long long ll; const int N=4e5+10; const int inf=0x3f3f3f3 阅读全文
摘要:
当不存在没有被染色的边时: 若被自己染黑,则由于规则 1,这个点染了以后所有儿子都会被染 色,因此儿子的情况可以随便选: fu,1,0 = 1 + ∑min{fv,0/1/2,0/1} 若被儿子染黑,则必须要选择一个儿子传递上去,儿子能传递上 来只有两种情况: fu,0,0 = minv{min{f 阅读全文
摘要:
这个题有一个限制条件,就是每个位置会有d个怪物,题目告诉我们他会挡住d条路,并且要我们计算在最坏情况下的最短路。 最坏情况,就是阻挡我到达这个点之后,往外的前d小的路。因此这是一个多元变种迪杰斯特拉,在普通的多元迪杰斯特拉的情况 我们注意每个点的d状态,忽视前d个到达这个点的答案,这样跑出来的就是最 阅读全文
摘要:
A 数位dp B 欧拉路径判定 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=500005; const int inf=0x3f3f 阅读全文
摘要:
思维好题 首先考虑哪些状态下所有答案均为0,一种是,对于某一个点的邻边,存在三个相同的数,或者存在aabb形的数,因为我们无论以哪个点为根,这个点一定有两个作为他的儿子,所以上述情况都不满足。 在特判过后,我们寻找哪些可能满足条件,考虑进行dfs序遍历,对于每个点的dfs序和在他邻边中两个相等的边所 阅读全文
摘要:
对于本题,本质上是哈密顿回路,但是由于特殊性,每个点仅有一条往外的连边 因此,本题等价于欧拉路径的判断,只需要根据欧拉路径判断答案即可 即连通性和出度入度间的关系 #include<bits/stdc++.h> using namespace std; typedef long long ll; t 阅读全文