上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 29 下一页
摘要: BZOJ 4813 虽然数据范围很迷人,但是想树形$dp$没有前途。 先发现一个事情,就是我们可以先选择一条链,最后要走到这一条链上不回来,走到链上的点每一个只需要一步,而如果要走这条链之外的点,一个点需要走两步。 这条链怎么选取?为了尽量减少步数,肯定是最长链。 现在有了一个显然的事情,如果限制步 阅读全文
posted @ 2018-10-25 20:46 CzxingcHen 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 欧拉回路,巧妙的解法。 发现每一个点$(x, y)$实际上是把横坐标和$x$和纵坐标$y$连一条线,然后代进去跑欧拉回路,这样里一条边对应了一个点,我们只要按照欧拉回路间隔染色即可。 注意到原图可能并不是一个完全的欧拉图,但是度数为奇数的点只可能有偶数个,我们可以在连完边之后再把度数为奇数的点两两配 阅读全文
posted @ 2018-10-25 17:41 CzxingcHen 阅读(386) 评论(0) 推荐(1) 编辑
摘要: BZOJ 1924 内存要算准,我MLE了两次。 建立$n + r + c$个点,对于一个点$i$的坐标为$(x, y)$,连边$(n + x, i)$和$(n + r + y, i)$,代表这一列和这一行可以走到它,如果类型为$1, 2$只要连一条到所在行和所在列的边就可以了,但是类型$3$似乎没 阅读全文
posted @ 2018-10-25 08:24 CzxingcHen 阅读(181) 评论(0) 推荐(0) 编辑
摘要: CF上可以提交。 链接 依然是很妙的解法。 我们可以枚举每一个出现过的边权$L$,然后把所有边的边权减掉这个$L$,如果小于$L$就变为$0$,然后跑一遍最短路然后加上$k * L$更新答案即可。 注意$L$也可以取到$0$。 这样做就是强制让出了前$k$大的边的边权,所以能计算到所有答案。 时间复 阅读全文
posted @ 2018-10-24 19:57 CzxingcHen 阅读(280) 评论(0) 推荐(0) 编辑
摘要: BZOJ 4456 听若干个大佬讲过$n$遍终于写掉了。 我把时限基本上跑满了2333…… 分治 + 最短路。 首先我们去分治这个矩形格子,找到一条长边把它对半切,对切开的边上的每一个点跑一遍最短路然后更新所有答案,接下来把询问分成两类,一类是两个端点都在切开的中间线一侧的,另一类是在两侧的。对于在 阅读全文
posted @ 2018-10-24 18:32 CzxingcHen 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 首先考虑到把集合拆成两部分然后代进去跑多源多汇最短路,这样子求出来的最小值就是答案。 然后考虑怎么拆分集合能够计算到所有的答案,其实对于规模为$n$的点拆分$log$次就够了,因为两个点的编号的二进制表示一定有一位是不同的,每一次选取所有该位为$1$的点作源,所有该位为$0$的点作汇,然后跑一跑最短 阅读全文
posted @ 2018-10-24 14:46 CzxingcHen 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 巧妙的解法。 首先直接限定每一个点不走跑$floyd$是$n^4$的,会超时,我们在$floyd$的时候加入分治思想,用$solve(l, r)$表示不考虑$[l, r]$区间的点所能得到的最短路,然后每一层处理一下就好了,直到最后一层就更新到答案中去。 时间复杂度$O(n^3logn)$。 我的代 阅读全文
posted @ 2018-10-24 12:36 CzxingcHen 阅读(224) 评论(0) 推荐(0) 编辑
摘要: BZOJ 5301 [CQOI2018]异或序列 双倍经验。 一个区间的异或值可以用前缀和来表示,$a_l \bigoplus a_{l + 1}\bigoplus a_{l + 2} \bigoplus ... \bigoplus a_r = xorSum_r \bigoplus xorSum_{ 阅读全文
posted @ 2018-10-24 08:00 CzxingcHen 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 话说这是去年大爷的一道NOIP模拟赛题,对着大爷的代码看了一堂课的我终于把这题写掉了。 本题要求在基环树给定的环上删去一条边使剩下的树的直径最小,输出这个最小直径。 那么基环树可以画成这样子的: 有一些在环上的点,还有一些不在环上的点,显然只能在环上断边,我们预处理找出这个环$a_1 - a_m$, 阅读全文
posted @ 2018-10-23 18:41 CzxingcHen 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 挺妙的解法。 发现边权很小,我们可以考虑从大到小枚举边权来进行$kruskal$算法,这样子对于每一个边权$i$,我们只要枚举$0 \leq j < m$,找到一个点使它的点权为$i | 2^j$,尝试连边即可。 另外,如果同一个点权重复出现,一定有办法使这个边权连满,这样子直接累加到答案里就可以了 阅读全文
posted @ 2018-10-23 14:53 CzxingcHen 阅读(510) 评论(0) 推荐(1) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 29 下一页