<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Sakura_Chiyo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Sakura_Chiyo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Sakura_Chiyo]]></copyright><item><title><![CDATA[搬家小分队！]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/84557346</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/84557346</guid><author>Sakura_Chiyo</author><pubDate>Mon, 26 Nov 2018 21:55:56 +0800</pubDate><description><![CDATA[博主博客搬家啦

链接

博客不会频繁更新

因为中考，暂时退役。

明年再见！

]]></description><category></category></item><item><title><![CDATA[O(1) LCA]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83592375</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83592375</guid><author>Sakura_Chiyo</author><pubDate>Wed, 31 Oct 2018 23:08:01 +0800</pubDate><description><![CDATA[基本思想

按欧拉序将子树对应映射到序列上，求lca(x,y)，pos[x]--pos[y]中深度最小的点就是答案。

具体实现

先dfs一遍，处理出深度并完成映射。

然后用st表求出区间深度最小的点。

最后回答模仿st表即可。

代码


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;string&amp;gt;
#incl...]]></description><category></category></item><item><title><![CDATA[线性筛素数与欧拉函数]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83316368</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83316368</guid><author>Sakura_Chiyo</author><pubDate>Tue, 23 Oct 2018 23:27:20 +0800</pubDate><description><![CDATA[线性筛素数

问题：给出n，输出所有&amp;lt;=n的素数。

1.暴力做法：

枚举一个 i (3&amp;lt;=i&amp;lt;=n) 暴力判断 i 是否是素数，是的话输出。

复杂度O(nlog(n))，海星。但是筛素数往往只是解题的一小步，这个复杂度有点高了。

2.Eratosthenes筛法:

第一种方法由于要挨个判断，复杂度高了些。为了避免不必要的判断，我们可以在找出一个素数时，筛掉它所有的倍数。...]]></description><category></category></item><item><title><![CDATA[【洛谷P4879】ycz的妹子]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83119392</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83119392</guid><author>Sakura_Chiyo</author><pubDate>Wed, 17 Oct 2018 23:12:13 +0800</pubDate><description><![CDATA[链接

虽然题目很真实，但还是得无情简化

给一个序列，在序列上进行：

1.单点修改

2.求和

3.删除第x个点（将第x个点的位置修改为0）

4.新增一个点（相当于将对应点+y）

只看前两条，完全可以用树状数组/线段树解决。

第三条可以想一下，我们需要在线修改，第x个节点的位置是会随时变的，如何维护呢？

可以记录一下每个区间的节点数，用类似于二分的方法维护。

这样的话，直接选择线段...]]></description><category></category></item><item><title><![CDATA[【CF_516_div2_B】Equations of Mathematical Magic]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83050939</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/83050939</guid><author>Sakura_Chiyo</author><pubDate>Mon, 15 Oct 2018 21:45:54 +0800</pubDate><description><![CDATA[链接

（减法、位数均为二进制下）

简化：

给出a , 对于方程   问有多少非负解。

如果这是一道noip题，数据肯定有很大一部分是模拟分，所以暴力枚举拿到一半以上应该不成问题。

于是我试了一下，发现了一个规律：对于一个a, 它的答案就是它所有子集的个数。

即    （bitsize是a二进制下1的个数）。

这个确实过了。但为什么是对的呢？

首先把方程移一下项：



相当于a对x...]]></description><category></category></item><item><title><![CDATA[【洛谷P2678】跳石头]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82962378</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82962378</guid><author>Sakura_Chiyo</author><pubDate>Sun, 07 Oct 2018 23:07:02 +0800</pubDate><description><![CDATA[链接

这应该是普及组的题

分析题，L的范围变态的大，肯定不能用普通模拟，更别说暴搜了。

当求解性问题特别难时，可以考虑转化成判定性问题进行二分答案。

二分哲学三问：

可不可以进行二分

如果我们使最小的长度是x可以过，那x-1,x-2...肯定都可以。

那么我们要的，最大的x之后的点，肯定都不可以。

这时问题的答案就具有了单调性。

就可以进行二分答案。

二分什么

二分x的长度即...]]></description><category></category></item><item><title><![CDATA[【洛谷P1131】时态同步]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82948185</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82948185</guid><author>Sakura_Chiyo</author><pubDate>Sat, 06 Oct 2018 00:37:11 +0800</pubDate><description><![CDATA[
背景：stu-49不是个好stu，听一下午树形DP毛都不会写。


链接

显然这是棵树

首先声明，我会说两种想法，第一个想法是错误的，第二个想法是正解。

第一个：

考虑直接从根走，len [ u ] 表示从根到结点u的路径长度，取个max表示 max { dis[u][son[u] }；



（以上为假式子）

这个做法显然是错的，因为我们只处理了根节点，而对于任意一个非根非叶结点，它...]]></description><category></category></item><item><title><![CDATA[【洛谷P1850】换教室]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82941631</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82941631</guid><author>Sakura_Chiyo</author><pubDate>Fri, 05 Oct 2018 00:38:22 +0800</pubDate><description><![CDATA[链接

首先看题，求什么全局最大值，基本可以确定是用动归。

我们先不考虑概率，那么问题转化为：上完N节课消耗的最小体力值是多少。

如何转移？

对于每个时间段，显然有换课有不换课两种选择，并且一节课的答案只与上一节课的答案有关。

可以用 dis [ i ] [ j ] 表示 [ i 教室 ] 到 [ j 教室 ] 的最短路（数据很小，可以预先Floyd处理出来）

用 f [ i ] [ 0...]]></description><category></category></item><item><title><![CDATA[【游记】国庆集训营]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82916287</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82916287</guid><author>Sakura_Chiyo</author><pubDate>Mon, 01 Oct 2018 14:05:55 +0800</pubDate><description><![CDATA[D1

总算到了集训的时候了啊。。。。。。

坐上车以后先看了番，《月色真美》真好看啊

然后就开始玩“我有你没有”。

我：我用高锰酸钾拖过地！

某大佬：我吊打过std/我没掉过年级前三/我中考全市前三。。

tql。。。

中午吃了饭，兰州拉面真好吃。

就是忘记拿过蓝书来让老师签名了......下午去买盒明信片吧......

和大家在一起就是很开心啊，明天上午会怎样啊，不知道呢，zzm又...]]></description><category></category></item><item><title><![CDATA[【洛谷P1518】两只塔姆斯沃牛]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82874526</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82874526</guid><author>Sakura_Chiyo</author><pubDate>Thu, 27 Sep 2018 22:50:27 +0800</pubDate><description><![CDATA[觉得自己绿题做的太少了，就选了最简单的绿题。

这个题类似于之前一个模拟赛的题，某子沐应该印象深刻（滑稽）

就是纯粹的模拟。

就是模拟啊。。

解释都在代码里了qwq

泥萌做法为什么那么高端啊，瑟瑟发抖


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;string&amp;gt;
#include&amp;lt;cstring&amp;gt...]]></description><category></category></item><item><title><![CDATA[Dijkstra]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82821424</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82821424</guid><author>Sakura_Chiyo</author><pubDate>Sun, 23 Sep 2018 12:46:23 +0800</pubDate><description><![CDATA[存一下模板，指不定哪天手抖就删了


#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#include&amp;lt;queue&amp;gt;
#include&amp;lt;string&amp;gt;
#include&amp;lt;cstring&amp;gt;
#define maxn 100005
#define maxm 1000005
using namespace std;
in...]]></description><category></category></item><item><title><![CDATA[【洛谷P1967】货车运输]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82807935</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82807935</guid><author>Sakura_Chiyo</author><pubDate>Fri, 21 Sep 2018 23:17:23 +0800</pubDate><description><![CDATA[链接

就这个题，调了三天。

在累的老眼昏花的时候发现了一些有趣的事情：





（此时内心：qwq?qwq!qwq...qwq!QAQAQAQ）

--------------------------------------------------------闲扯完毕，手动分割-------------------------------------------------------

简...]]></description><category></category></item><item><title><![CDATA[【洛谷P1439】最长公共子序列]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82750324</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82750324</guid><author>Sakura_Chiyo</author><pubDate>Mon, 17 Sep 2018 22:55:29 +0800</pubDate><description><![CDATA[链接

（N方过百万是lsh的事，和我css有什么关系。）

两个序列的最长公共子序列，一定是这个样子的（此处样例，不唯一）：



然后给映射一下，很容易发现，公共子序列的映射结果一定是上升的。

于是乎就把问题转化成了求最长上升子序列。

这里有一个log(n)的求法:

f[len]表示长度为len的上升子序列的结尾。

在dp时，如果大于结尾，就把他加到末尾；

如果小于结尾，就在前面二分...]]></description><category></category></item><item><title><![CDATA[【洛谷P1351】联合权值]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82634279</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82634279</guid><author>Sakura_Chiyo</author><pubDate>Wed, 12 Sep 2018 21:25:53 +0800</pubDate><description><![CDATA[链接

这个题让我们求得是最大联合权值和联合权值之和。

先来讨论较简单的，联合权值之和。

当需要求两个点之间的某些关系时，往往可以将其转化成一个点的问题。

比如这个题，就可以通过枚举中间点，通过一些式子算出答案（如下图）



指出的那一个点，以它为中点的答案之和就是它周围一圈的点所有组合的答案之和，这一点很好想到。

枚举的话是不太好的，如果是一个200000的菊花图，就完美的TLE了。
...]]></description><category></category></item><item><title><![CDATA[【洛谷P1073】最优贸易]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82597086</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82597086</guid><author>Sakura_Chiyo</author><pubDate>Mon, 10 Sep 2018 22:14:36 +0800</pubDate><description><![CDATA[链接

仔细读题后发现，只进行一次交易。

于是问题就转化成了：找一组点（u，v），使pri[v]-pri[u]最大。

（此处觉得贪心能过一点）

关于找两个点，一般来说都可以转化成找一个点，然后计算出它可以辐射到的点的答案。（好像有点乱）

转化到这个题，就是找一个点，算出它之前的点中最小的，它之后的点中最大的，这样就可以算出经过这个点的路径的最优答案。

实际操作只需要把spfa稍稍改一下然...]]></description><category></category></item><item><title><![CDATA[【洛谷P1948】电话线Telephone Lines]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82596213</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82596213</guid><author>Sakura_Chiyo</author><pubDate>Mon, 10 Sep 2018 21:16:02 +0800</pubDate><description><![CDATA[链接

这个题有两种做法，二分和动归。

二分的想法比较朴素。本题满足单调性，如果支付一个额度的钱可以完成升级，那么支付更多的钱一定也可以完成。

所以可以考虑二分答案，上界是max_L，下界是0。

然后问题就变成了：是否可以用mid的钱来完成升级。

这个判断的话，就是把多于mid的路径权值设为1，少于的不用管。

那么d[n]最后就转化成  用mid的钱  走到n  最少需要免费多少条路。
...]]></description><category></category></item><item><title><![CDATA[【洛谷P1064】金明的预算方案]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82354846</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82354846</guid><author>Sakura_Chiyo</author><pubDate>Mon, 03 Sep 2018 21:05:24 +0800</pubDate><description><![CDATA[大概。。。逆向思维？

链接

第一遍想的是按附件处理主件，这样的话可能会买很多个主件。维护的话应该是有办法的，只是不太好搞。

于是我们考虑重点维护主件，按主件处理附件，无非就是五种情况。

1.不选

2.只要主件

3.要主件和附件1

4.要主件和附件2

5.金明才做选择，我全都要！

因为这个题数据构成比较简单，所以结构体处理一波，01背包搞一搞就过了。

（我还考虑过跑最长路，真不知...]]></description><category></category></item><item><title><![CDATA[【洛谷P1095】守望者的逃离]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82319773</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82319773</guid><author>Sakura_Chiyo</author><pubDate>Sun, 02 Sep 2018 21:52:54 +0800</pubDate><description><![CDATA[链接

第一次知道dp还能分开写。

关于这个题，最开始一直没有脱离以前的dp模板，想压到一个dp里，这么做显然会姹紫嫣红。

那么就可以考虑将dp分开。

首先罗列出状态，即这一秒可以干什么：

1.跑17米

2.不动，加4点血

3.使用大招，跑60米，耗10点血

那么，就可以把这三个状态根据是否有血量参与，分成两组处理——1,23 。

用贪心的思想来看，在能直接使用大招的情况下，必然使...]]></description><category></category></item><item><title><![CDATA[tarjan算法（缩点）]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82291786</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82291786</guid><author>Sakura_Chiyo</author><pubDate>Sat, 01 Sep 2018 23:29:13 +0800</pubDate><description><![CDATA[tarjan可以求强连通分量，在强连通分量的基础上，可以加一些操作来缩点。

（我觉得此处应该有个图，即使不太用qwq）

比如有一张这个图（懒得不想标号系列）



它的强连通分量的情况大概是这样子（忽视无意间甩过去的那一笔）



于是把它的强连通分量缩成点，就得到了这个东西



（小精简变得真东西）

现在已经知道了缩点是什么东西，那么如何缩呢？

只需要记录一个belong数组，belo...]]></description><category></category></item><item><title><![CDATA[tarjan算法（强连通分量与割点）]]></title><link>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82260910</link><guid>https://blog.youkuaiyun.com/Sakura_Chiyo/article/details/82260910</guid><author>Sakura_Chiyo</author><pubDate>Fri, 31 Aug 2018 21:07:18 +0800</pubDate><description><![CDATA[tarjan算法可以求有向图的割点割边强连通分量（还有一些奇奇怪怪的操作）

 

我只会割点和强连通分量，割边（和缩点）以后可能会加，如果是来看割边的话，现在跑还来得及。。

 

 

（先来一张有向图叭）



用这张图，我们来解释一些东西：

设在有向图G中，GG为其子图，u,v分别是G中的节点。

强连通：如果u可以到达v，v也可以到达u，那么u,v强连通。（比如2可以到达9,9可以通过...]]></description><category></category></item></channel></rss>