把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 45 下一页
摘要: 题面传送门 你会发现这道题和LNOI2014某题很像。 但是那个$k$次方很难处理。 考虑$k=1$的情况,就是那道题。 照样差分,但是这次差分不是那么差,而是每个点的权值改成$d_i^k-(d_i-1)^k$这东西就可以实现了。 因为加到一个点时这个点到根节点的路径都会被加。而这个值又恰好等于深度 阅读全文
posted @ 2020-10-06 09:30 275307894a 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一道典型的树剖题目。 这东西如果暴力肯定是没法算的。除非能转化一下,比如算贡献。 然后会发现HHHOJ上有一道题和这个很像。 这样的话可以把每个点向上算贡献,一直加$1$到根节点。 这样当一个点加到时那么就自然算到了贡献。 其实质是差分,只不过没那么明显罢了。 这个东西可以用树剖+线段树 阅读全文
posted @ 2020-10-06 09:24 275307894a 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 这道题$O(n^2)$的dp是很好想的。 设$f_i$表示到$i$时的队伍小于等于$rank_i$最大的不用移动的个数,那么显然状态转移方程是 \(f_i=\max\limits_{j=1}^{j\leq i\&rank_j\leq rank_i}f_j+1\) 就是从小于等于一定不用乱序的转移。 阅读全文
posted @ 2020-10-05 16:33 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 首先你可以把所有直径求出来然后暴力。 但是这道题可以把求树的直径的方法。 首先求出一条直径,把直径上的所有点点权减一。然后再求一遍,两次相减就是答案。 正确性显然。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a 阅读全文
posted @ 2020-10-05 15:06 275307894a 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 启发式合并大法好! 你会发现这道题可以暴力合并。 然而数据稍微用心一点就卡掉了。 然后你可以试图优化一下,比如合并时把小的合并到大的上面去。 结果就过了。 这样复杂度上界是$O(nlogn)$,具体证明在这篇题解里有。 代码实现: #include<cstdio> #include<cs 阅读全文
posted @ 2020-10-05 15:01 275307894a 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 用脚找一下规律就会发现可以构成最后一项为全部异或和的循环节。 那么前缀异或就好了。 代码实现: #include<cstdio> using namespace std; int n,m,k,z; long long a[1000039],q[1000039],ans,x,y; int main() 阅读全文
posted @ 2020-10-05 14:55 275307894a 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 看到数据范围一眼状压。 然后就是怎么转移的问题了。 设$f_i$为使用状态为$i$时所用的节点数。 然后你会发现这个用$O(2nnk)$的转移不了。 那么就可以枚举子集转移。 $dp$方程为$dp_i=min{dp_j+dp_{i⨁j}-lcp(i)}$ 复杂度$O(3^n)$ 代码实现: #inc 阅读全文
posted @ 2020-10-05 14:53 275307894a 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 当然这道题可以跑最小生成树。 但是那样时间复杂度是$O(nmα(n))$,可以被卡掉。 这里有一个跑不满$O(nm)$的 就是每次拿到一条边,就搜索是否联通。 不连通就加上去 联通就找到最大的那条边,看看能不能替换,能换就换。 代码实现: #include<cstdio> #include<cstr 阅读全文
posted @ 2020-10-05 14:41 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 题目要求有多少个$i,j$使的$l\leq \sum\limits_^\leq r$ 用前缀和搞一下,变成$l\leq q_j-q_\leq r$ 再变换一下,变成$q_j-r\leq q_\leq q_j-l$ 然后动态开点线段树或者平衡树一搞就好了。 代码实现: #include<c 阅读全文
posted @ 2020-08-27 22:13 275307894a 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 显然是树剖题目,关键是怎么维护不同宗教。 对于每个宗教可以开一棵线段树,但是空间会爆。 所以可以动态开点。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespac 阅读全文
posted @ 2020-08-27 22:07 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 二维$dj$ 考虑设$d_{i,j}$为到达$i$点,还有$j$升油的最小花费。 那么可以拓展出两种状态,即加$1$升油或前往下一个城市。 代码实现: #include<cstdio> #include<cstring> #include<queue> using namespace s 阅读全文
posted @ 2020-08-27 22:02 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一道二分图的题目。 考虑将菜向客人,客人向房间连权值为$1$的边,但是这样会有重复计算。 所以将客人拆成两个点,两点之间连权值为$1$的边,就可以达到限制流量的目的。 代码实现: #include<cstdio> #include<cstring> #include<queue> #de 阅读全文
posted @ 2020-08-27 22:00 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这道题卡空间卡到了丧心病狂的程度。 两点间路径可以转化为前缀异或值。 对于一般的这样的题目,我们可以直接在一棵$trie$上分治,每次选更大的一边,时空复杂度都是$O(nlogw)$ 但是这道题卡空间,所以只能用滚动$trie$ 何为滚动$trie$? 可以发现,这道题在某种意义上只有一 阅读全文
posted @ 2020-08-27 21:57 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 月赛中的简单题。 考虑将原数列以能量排序,那么肯定是前一半匹配后一半最优。 而匹配时优先取被覆盖次数最大的即可判断无解。 但是有一种特殊情况,就是前一半全部指向一个点。 那么把这个点特殊处理掉然后正常做即可。 代码实现: #include<cstdio> #include<queue> 阅读全文
posted @ 2020-08-24 22:05 275307894a 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 月赛中的简单题。 考虑推一波式子。 设$g=gcd(b_i,b_j)$ 那么原式就是$b_i+b_j+g=\frac{b_i\times b_j}$ \(\frac{b_i}{g}+\frac{b_j}{g}+1=\frac{b_i}{g}\times \frac{b_j}{g}\) 换 阅读全文
posted @ 2020-08-24 22:03 275307894a 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一道圆方树的板子题。 对于每个点先让它连到环顶。 那么他到环顶的距离就是从两边走的最小值。 那么求两点间距离就可以考虑倍增了。 但是最后要考虑特殊情况 代码实现: #include<cstdio> #include<cstring> #define abs(x) ((x)>0?(x):- 阅读全文
posted @ 2020-08-24 21:57 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一眼就是二分图,但是考虑怎么建边。 如果暴力匹配$O(nmtlogw)$肯定会$T$飞。 卡片上的数的阈值范围很小,可以考虑欧拉筛一趟然后分解质因数。 分解质因数后对于每个质数开一个邻接表,然后对于每一个建边。 建边复杂度就变成了$O(tnlogw)$ 代码实现: #include<cs 阅读全文
posted @ 2020-08-22 13:56 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 考虑暴力$dp$:设$dp_i$表示以$i$结尾的分组方案数,\(q_i=\sum\limits_{j=1}^{i}a_i\) 那么$dp_i=\sum\limits_^{dp_j[q_i-q_j\geq0]}+[q_i\geq0]$ 然后发现这个是一个二维偏序板子。就可以树状数组优化了 阅读全文
posted @ 2020-08-22 13:51 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这是一道基环树直径的题目。 考虑对于一个基环树,只有两种情况:直径在环上,直径在半个环上与链上。 直径在环上直接搞就好了,另一种情况可以单调队列优化dp 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)? 阅读全文
posted @ 2020-08-22 13:45 275307894a 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 我想没有人拿一棵树状数组去模拟的吧 树状数组模拟有$40$分 而只要你仔细观察就会发现,其实题目要你求一个式子:\(2^{\left\lfloor log^2(n)+1 \right\rfloor}-n\) 那么题目变成了$log2(n)$怎么求 一个个除有$60$分,时间复杂度$O(t 阅读全文
posted @ 2020-08-18 15:58 275307894a 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这东西有一个更优的复杂度。 显然可以二分,二分以后对每一维尺取后算是$O(nwlogw)$的,可以过去。 但是我们发现在第二维尺取时的这一维$w$很没有必要,换句话说,很没效率。 所以就可以用一棵权值线段树代替掉,对每一个点向后$mid$个贡献权值。查询时查询最大值即可。 代码实现: # 阅读全文
posted @ 2020-08-18 15:58 275307894a 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 仔细阅读题面可知,只有在这个循环矩阵内有连续$k$个斜着的$1$,那么就可以覆盖。 所以这题可以分成两部分:预处理哪些区间可以被覆盖和处理覆盖的最小区间。 处理覆盖的最小区间显然可以单调队列优化dp,设$f_i$为覆盖到第$i$个且最后一个矩阵右端点在$i$处的最小覆盖数量。那么可得状态 阅读全文
posted @ 2020-08-17 21:56 275307894a 阅读(103) 评论(0) 推荐(0) 编辑
摘要: Day 0 发现$CCF$很有良心,居然搞$IOI$赛制,还不用组合程序。 然后,$CCF$发了密码,感觉好奇怪啊...... 然后晚上又发通知说密码错了...... Day 1 开局看了第一题,感觉题面很长不想做。 然后就跳了第二题。 第二题是求两点间的路径所延伸的路径中的最小值,不过我不会做.. 阅读全文
posted @ 2020-08-17 16:25 275307894a 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 动态开点线段树水水就过了。 指针版更好写。 代码实现: #include<cstdio> using namespace std; int n,m,k,x,y,z,tot=1; struct tree{int l,r,f,sum;}t[15000039]; inline void pus 阅读全文
posted @ 2020-08-16 11:47 275307894a 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 显然基环树dp 对于每个联通块找到环然后强制选和不选累计答案即可。 代码实现: #include<cstdio> #include<cstring> #include<queue> #define max(a,b) ((a)>(b)?(a):(b)) using namespace st 阅读全文
posted @ 2020-08-16 11:43 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 45 下一页
浏览器标题切换
浏览器标题切换end