<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android66666的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Android66666</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Android66666]]></copyright><item><title><![CDATA[我又双叒叕搬家了]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058327</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058327</guid><author>Android66666</author><pubDate>Fri, 25 Jan 2019 23:42:00 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/Patrickpwq


转载于:https://www.cnblogs.com/Patrickpwq/articles/10322325.html]]></description><category></category></item><item><title><![CDATA[【USACO15JAN】草鉴定Grass Cownoisseur（缩点+分层图?）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058328</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058328</guid><author>Android66666</author><pubDate>Wed, 07 Nov 2018 22:04:00 +0800</pubDate><description><![CDATA[蒟蒻好紧张啊 蒟蒻好紧张啊 蒟蒻好紧张啊 蒟蒻好紧张啊
一开始方向好像走错了 乱推了个拓扑的式子 然后FST了
然后还不肯放弃 挣扎了20分钟 又受到了刚上来都打完球了的ldx的diss
"我靠，这么傻逼的题你还没A吗"
好吧的确是傻逼题
先缩点
设s是1所在的scc的编号
考虑逆行的使用姿势
对于一个可以从s出发到达的点 逆行到一个可以到达s的点
然后这个东西你可以跑正反两发spfa
...]]></description><category></category></item><item><title><![CDATA[【洛谷 P3398】仓鼠找sugar（lca）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058324</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058324</guid><author>Android66666</author><pubDate>Tue, 06 Nov 2018 14:45:00 +0800</pubDate><description><![CDATA[听了教练的考前须知 蒟蒻紧张的要死 只想做信心题
同时满足：c或者d在x子树里 a或者b在y子树里 其中x=lca(a,b),y=lca(c,d)
#include&lt;bits/stdc++.h&gt;
#define N 100005
using namespace std;
template&lt;class T&gt;
inline void read(T &amp;x)
{
...]]></description><category></category></item><item><title><![CDATA[【ZJOJ2010】数字计数（数字计数）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058325</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058325</guid><author>Android66666</author><pubDate>Tue, 06 Nov 2018 11:57:00 +0800</pubDate><description><![CDATA[设f[i][j][p]表示长度为i 最高位为j p出现的个数
显然 f[i][j][p]=sigma{f[i-1][k][p]} 其中k是次高位 但是最高位出现的那么多次都没有被我们算进去
但是很显然只需要加上(i-2)^10就阔以了
然后常规的分[1,b],[1,a-1]解决
常规的分成两部分 一部分最高位小于最高位(似乎有点怪怪的??) 另一部分就是剩下的
在这里只说下另一部分
算了...]]></description><category></category></item><item><title><![CDATA[【USACO15DEC】最大流Max Flow（树上差分）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058322</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058322</guid><author>Android66666</author><pubDate>Tue, 06 Nov 2018 10:30:00 +0800</pubDate><description><![CDATA[听了教练的考前须知 蒟蒻紧张的要死 只想做信心题
#include&lt;bits/stdc++.h&gt;
#define N 50005
using namespace std;
int n,k,tot,first[N]; 
struct Tree
{
    int to,next;
}edge[2*N];
inline void addedge(int x,int y)
{
  ...]]></description><category></category></item><item><title><![CDATA[【洛谷11月月赛T3】【P4996】咕咕咕（组合数）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058323</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058323</guid><author>Android66666</author><pubDate>Tue, 06 Nov 2018 09:56:00 +0800</pubDate><description><![CDATA[迟到的题解 昨天乱翻的时候感觉这道题挺有意思的
一眼看过去状态压缩乱搜
转移方程大概是 设f[i]表示从0转移到i的遗憾值之和 f[i]=sigma(f[j])+val[i]*dis[i] dis[i]=sigma(dis[j]) 其中j是i的子集,dis[i]表示从0转移到i的方案数之和
妙啊有70分了
// luogu-judger-enable-o2
// luogu-judger...]]></description><category></category></item><item><title><![CDATA[【BZOJ 4247】挂饰（背包变形）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058320</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058320</guid><author>Android66666</author><pubDate>Mon, 05 Nov 2018 22:10:00 +0800</pubDate><description><![CDATA[虽然转移方程可以一眼看出
但是烦就烦在为何要排序
有人说这是一个贪心，又有人说这是一个保障正确性的。
就按照贪心的想法好了：在保证正确性的情况下尽量多的挂钩。
#include&lt;bits/stdc++.h&gt;
#define N 2005
#define INF 0x3f3f3f3f
using namespace std;
int n,f[N][N];
struct Node...]]></description><category></category></item><item><title><![CDATA[【NOIP 校内模拟】T3 忘了是啥名字了（dfs序+树状数组）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058318</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058318</guid><author>Android66666</author><pubDate>Mon, 05 Nov 2018 20:30:00 +0800</pubDate><description><![CDATA[对于当前新加入的一条路径 他产生的贡献分为两种
1.另一条路径的LCA在当前路径上
2.当前路径的LCA在另一条上
对于情况1：
可以维护当前点到根节点有多少个LCA，查询只需查询u,v,-2*lca(u,v)，修改需要对lca的子树+1
对于情况2：
显然的树上差分，查询就是lca子树的前缀和，修改u++,v++,lca-2
即开两个树状数组，一个支持单点查询+区间修改，一个支持单点修...]]></description><category></category></item><item><title><![CDATA[【NOIP 校内模拟】T2 规避（容斥+最短路计数）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058321</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058321</guid><author>Android66666</author><pubDate>Mon, 05 Nov 2018 16:50:00 +0800</pubDate><description><![CDATA[可以先不管符合条件的 先统计出所有的可能走法(最短路条数*最短路条数) 然后减去会相遇的
会相遇的分为在点相遇和在边相遇
在点(设为p)相遇：先保证点在最短路上 然后从s到p的最短路等于从t到p的最短路
在边(设为(x,y,z))相遇：同样需要保证边在最短路上(需要判断三次 同样玄妙♂) 以及相遇的地方一定在边上(两条不同的最短路的两倍不超过总长 这个姿♂势可以记住) 挺玄妙的
#inc...]]></description><category></category></item><item><title><![CDATA[【NOIP 校内模拟】T1 line（带权并查集）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058316</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058316</guid><author>Android66666</author><pubDate>Mon, 05 Nov 2018 13:58:00 +0800</pubDate><description><![CDATA[很无奈 离正解就差一句话
简单的带权并查集 没啥好说的 也可以差分约束
#include&lt;bits/stdc++.h&gt;
#define N 100005
#define M 200005
#define D 10005
using namespace std;
template&lt;class T&gt;
inline void read(T &amp;x)
{
    x...]]></description><category></category></item><item><title><![CDATA[【NOIP 校内模拟】T1 优美的序列（二分+st表+卡常）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058319</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058319</guid><author>Android66666</author><pubDate>Fri, 02 Nov 2018 17:00:00 +0800</pubDate><description><![CDATA[我是菜鸡 我是蒟蒻 我好菜
ak一定是区间最小的值，且是所有数(包括自己)的最大公约数
我没看出来 没救了 noip爆零了 回家养猪了 没学上了 怎么办
gcd有单调性 gcd有单调性 gcd有单调性 gcd有单调性 gcd有单调性 可以二分 可以二分 可以二分 可以二分 要说多少遍才记得到
我没想到 没救了 noip爆零了 回家养猪了 没学上了 怎么办
stl少用 stl少用 stl少...]]></description><category></category></item><item><title><![CDATA[【NOIP校内模拟】T2 飞越行星带（kruskal）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058314</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058314</guid><author>Android66666</author><pubDate>Fri, 02 Nov 2018 15:48:00 +0800</pubDate><description><![CDATA[啥玩意儿啊 题都没读懂
飞船要飞过这个行星带 就必须穿过每个行星形成的瓶颈
于是我们把每个行星想象成一个点 形成的瓶颈就是与其他点相连的边
相当于一个最小生成树了 直到s t联通
当然 这样做有点难理解 还可以类似的二分+并查集做
#include&lt;bits/stdc++.h&gt;
#define N 805
#define eps 1e-6
using namespace st...]]></description><category></category></item><item><title><![CDATA[【NOIP 2017】逛公园（最短路+记忆化搜索）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058312</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058312</guid><author>Android66666</author><pubDate>Fri, 02 Nov 2018 08:10:00 +0800</pubDate><description><![CDATA[肯定要先跑一次最短路
题目中的k 相当于允许我们走k距离的“冤枉路”
回想之前有些题是如何判断哪些边是属于最短路上的 当dis[now]+edge[u].val==dis[vis] 这条边就在最短路上
类似的 我们可以得出 dis[now]+edge[u].val-dis[vis]就是这一次走的“冤枉路”的长度
到这个地方搜索的策略已经很明显了 dfs(now,remain)表示当前当前...]]></description><category></category></item><item><title><![CDATA[【SDOI2009】Elaxia的路线（拓扑+最短路+dp）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058317</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058317</guid><author>Android66666</author><pubDate>Thu, 01 Nov 2018 20:48:00 +0800</pubDate><description><![CDATA[先找出Elaxia的最短路 重新建图 在此图上我们再标记同时也是w**的最短路的边
显然这是一个DAG 可以做dp 设f[i]表示以i点结尾的最长公共连续和（公共路径一定是一条链） 则f[vis]=max(f[now],f[now]+e[u].val*e[u].flag)(flag表示是否也是w**的最短路)
为了使得没有后效性 需要在拓扑排序时做dp
#include&lt;iostr...]]></description><category></category></item><item><title><![CDATA[【BZOJ2750】【HAOI2012】道路（最短路+拓扑）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058310</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058310</guid><author>Android66666</author><pubDate>Thu, 01 Nov 2018 16:09:00 +0800</pubDate><description><![CDATA[容易想到枚举所有起点 做最短路 然后枚举边统计次数
一条边(x,y)的贡献 肯定是 s到x最短路的方案数 乘上 s到其他点但经过了y的最短路
对于前者
每个点可以从前一个点递推过来 只要满足dis[vis]==dis[now]+edge[u].val 当一个点被所有入边都统计了一次后 就可以搜他了（拓扑思想）
对于后者
每个点从后一个点递推过来
#include&lt;bits/stdc...]]></description><category></category></item><item><title><![CDATA[递增数列（迭代加深搜索）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058315</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058315</guid><author>Android66666</author><pubDate>Thu, 01 Nov 2018 14:32:00 +0800</pubDate><description><![CDATA[迭代加深搜索就是限制递归的层数，然后一层层地扩大限制的层数
我们记录当前深度，以及当前应该搜出几个数
设计剪枝：
1.当当前深度乘上2^r(r是还没有选的数)比m还小 那肯定是不行的 因为最大的扩展方式就是选两个最大的数
2.这一层比上一层数小
#include&lt;bits/stdc++.h&gt;
using namespace std;
int m,step,s[1000];
b...]]></description><category></category></item><item><title><![CDATA[【TYVJ1340】送礼物（折半搜索+hashmap）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058308</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058308</guid><author>Android66666</author><pubDate>Thu, 01 Nov 2018 13:36:00 +0800</pubDate><description><![CDATA[当答案可以分为两半时 为了降低复杂度 可以使用折半搜索
对前半部分 搜出所有可能的和 用map记录
对后半部分 同样也是搜出可能的和 如果前半部分存在一个和 能拼起来 那ans++
#include&lt;bits/stdc++.h&gt;
#define N 45
#define ll long long
using namespace std;
ll n,key,ans,a[N];
...]]></description><category></category></item><item><title><![CDATA[再数17（搜索+容斥）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058313</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058313</guid><author>Android66666</author><pubDate>Thu, 01 Nov 2018 12:16:00 +0800</pubDate><description><![CDATA[n个集合的容斥其实就是 总的 减去两两相交的 加上三个相交 减去四个相交 加上五个.....(奇加偶减)
这道题就是一个lcm的容斥
我们用搜索来实现 枚举选的数
需要加个剪枝 当前lcm已经超过了m
#include&lt;bits/stdc++.h&gt;
#define N 35
#define int long long
using namespace std;
int n,m,...]]></description><category></category></item><item><title><![CDATA[【CF869E】The Untended Antiquity（哈希+二维树状数组）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058311</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058311</guid><author>Android66666</author><pubDate>Wed, 31 Oct 2018 17:33:00 +0800</pubDate><description><![CDATA[当覆盖两点的最小矩形不同时，一定不可达
这样的问题不难想到经典的二维树状数组+差分来支持二维区间覆盖+查询
对于覆盖操作 我们可以差分的给这个矩阵里加上一个编号
对于操墙操作 我们可以反着减去这个编号
对于查询 就查询这两个点的值是否相同 编号的累积不影响 因为只有在同一个墙内才会累积
注意 如果只是单单的把编号从1开始标号是不够的 因为会出现1+3=2+2这类情况
需要哈希
#incl...]]></description><category></category></item><item><title><![CDATA[【NOIP校内模拟】T1 一串数字（思考题+一点点数论知识）]]></title><link>https://blog.youkuaiyun.com/Android66666/article/details/102058306</link><guid>https://blog.youkuaiyun.com/Android66666/article/details/102058306</guid><author>Android66666</author><pubDate>Wed, 31 Oct 2018 16:16:00 +0800</pubDate><description><![CDATA[关键是那些两个数相乘拼成了立方数的
一个数分解质因数后，指数%3是不影响的
我们可以这样想——我们通过一个数，反推出能够和他凑成立方数的数
但有可能这个数在原序列里不存在 不过没关系 我们开两个桶 每次比较下大小 只往一边放 这样就不会多统计了
#include&lt;bits/stdc++.h&gt;
#define N 100005
#define int long long
usi...]]></description><category></category></item></channel></rss>