博客园 - HHshy
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=44150
2019-07-14T07:31:33Z
HHshy
https://www.cnblogs.com/HHshy/
feed.cnblogs.com
https://www.cnblogs.com/HHshy/p/7260322.html
背景 - HHshy
2017-07-30T23:39:00Z
2017-07-30T23:39:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】 <a href="https://www.cnblogs.com/HHshy/p/7260322.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189708.html
bzoj3637 CodeChef SPOJ - QTREE6 Query on a tree VI 题解 - HHshy
题意: 一棵n个节点的树,节点有黑白两种颜色,初始均为白色。两种操作:1.更改一个节点的颜色;2.询问一个节点所处的颜色相同的联通块的大小。 思路: 1.每个节点记录仅考虑其子树时,假设其为黑色时所处的黑色联通块的大小和假设其为白色时所处的白色联通块的大小(树状数组维护)。 2.查询时找到深度最小的
2017-07-16T01:43:00Z
2017-07-16T01:43:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题意: 一棵n个节点的树,节点有黑白两种颜色,初始均为白色。两种操作:1.更改一个节点的颜色;2.询问一个节点所处的颜色相同的联通块的大小。 思路: 1.每个节点记录仅考虑其子树时,假设其为黑色时所处的黑色联通块的大小和假设其为白色时所处的白色联通块的大小(树状数组维护)。 2.查询时找到深度最小的 <a href="https://www.cnblogs.com/HHshy/p/7189708.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189694.html
BZOJ4373 算术天才与等差数列 题解 - HHshy
题目大意: 一个长度为n的序列,其中第i个数为a[i]。修改一个点的值询问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列。 思路: 1.一段区间符合要求满足:(1)区间中的max-min=(r-l)*公差;(2)区间相邻的两个数的差的gcd为公差;(3)区间内的数不重复。 2.(1)(
2017-07-16T01:38:00Z
2017-07-16T01:38:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 一个长度为n的序列,其中第i个数为a[i]。修改一个点的值询问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列。 思路: 1.一段区间符合要求满足:(1)区间中的max-min=(r-l)*公差;(2)区间相邻的两个数的差的gcd为公差;(3)区间内的数不重复。 2.(1)( <a href="https://www.cnblogs.com/HHshy/p/7189694.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189664.html
洛谷P1521 求逆序对 题解 - HHshy
题意: 求1到n的全排列中有m对逆序对的方案数。 思路: 1.f[i][j]表示1到i的全排列中有j对逆序对的方案数。 2.显然,1到i的全排列最多有(i-1)*i/2对逆序对,而对于f[i][j]来说,新加入一个数i+1,产生的新的逆序对数与插入的位置有关(数目为插入的数的位置之后的数的数目),于
2017-07-16T01:22:00Z
2017-07-16T01:22:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题意: 求1到n的全排列中有m对逆序对的方案数。 思路: 1.f[i][j]表示1到i的全排列中有j对逆序对的方案数。 2.显然,1到i的全排列最多有(i-1)*i/2对逆序对,而对于f[i][j]来说,新加入一个数i+1,产生的新的逆序对数与插入的位置有关(数目为插入的数的位置之后的数的数目),于 <a href="https://www.cnblogs.com/HHshy/p/7189664.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189634.html
[CTSC2007]数据备份Backup 题解 - HHshy
题意: 一维直线上有n个点,任取2k个互不相同的点组成k条链,求链的最小总长 思路: 1.最优时链不相交,相邻两两相减,将题目转化为:在n-1个数中取互不相邻的k个数使总和最小。 2.贪心取最小的“数”(设为a[x])累加(表示已经取了),再建立一个“反悔机制”(可能和网络流相似):将a[x]向两边
2017-07-16T01:05:00Z
2017-07-16T01:05:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题意: 一维直线上有n个点,任取2k个互不相同的点组成k条链,求链的最小总长 思路: 1.最优时链不相交,相邻两两相减,将题目转化为:在n-1个数中取互不相邻的k个数使总和最小。 2.贪心取最小的“数”(设为a[x])累加(表示已经取了),再建立一个“反悔机制”(可能和网络流相似):将a[x]向两边 <a href="https://www.cnblogs.com/HHshy/p/7189634.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189618.html
[HNOI2012] 永无乡 题解 - HHshy
题意: n个点,有加边操作,询问与某一点处于相同的联通块的点中权值第k大的点 思路: 对所有点建立一棵权值线段树,加边就配合并查集进行线段树合并 反思: 动态开点,权值线段树要用sum[g[x=find(x)]](还是不够熟练),g为根。 代码:
2017-07-16T00:59:00Z
2017-07-16T00:59:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题意: n个点,有加边操作,询问与某一点处于相同的联通块的点中权值第k大的点 思路: 对所有点建立一棵权值线段树,加边就配合并查集进行线段树合并 反思: 动态开点,权值线段树要用sum[g[x=find(x)]](还是不够熟练),g为根。 代码: <a href="https://www.cnblogs.com/HHshy/p/7189618.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189593.html
[Poi2011]Meteors 题解 - HHshy
题目大意: 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值。 思路: 整体二分(二分答案),对于每个国家,如果在m次事件后到达目标则放在左边,否则放在右边(用下标映射)。区间加用树状数组维护。 反思:
2017-07-16T00:47:00Z
2017-07-16T00:47:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值。 思路: 整体二分(二分答案),对于每个国家,如果在m次事件后到达目标则放在左边,否则放在右边(用下标映射)。区间加用树状数组维护。 反思: <a href="https://www.cnblogs.com/HHshy/p/7189593.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189574.html
poj 3417 Network 题解 - HHshy
题意: 先给出一棵树,然后再给出m条边,把这m条边连上,然后剪掉两条边,一条是原边,一条是新边,问有多少种方案能使图不连通。 思路: 从原边的角度看 1.树加边,一定成环,加一条(u,v)边就有u->lca->v上的边被覆盖一次 2.当一条边没被覆盖时,删去该边与任意一条新边都能使图不连通,即有m种
2017-07-16T00:34:00Z
2017-07-16T00:34:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题意: 先给出一棵树,然后再给出m条边,把这m条边连上,然后剪掉两条边,一条是原边,一条是新边,问有多少种方案能使图不连通。 思路: 从原边的角度看 1.树加边,一定成环,加一条(u,v)边就有u->lca->v上的边被覆盖一次 2.当一条边没被覆盖时,删去该边与任意一条新边都能使图不连通,即有m种 <a href="https://www.cnblogs.com/HHshy/p/7189574.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189562.html
ZOJ - 3781 Paint the Grid Reloaded 题解 - HHshy
题目大意: 给一个n*m的X O构成的格子,对一个点操作可以使与它相连通的所有一样颜色的格子翻转颜色(X—>O或O—>X),问给定的矩阵最少操作多少次可以全部变成一样的颜色。 思路: 1.每次操作都将本身所在的连通块与和自己相邻的不同颜色的连通块变成同一种颜色,也就是变成一个连通块了,那么要使n次操
2017-07-16T00:24:00Z
2017-07-16T00:24:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 给一个n*m的X O构成的格子,对一个点操作可以使与它相连通的所有一样颜色的格子翻转颜色(X—>O或O—>X),问给定的矩阵最少操作多少次可以全部变成一样的颜色。 思路: 1.每次操作都将本身所在的连通块与和自己相邻的不同颜色的连通块变成同一种颜色,也就是变成一个连通块了,那么要使n次操 <a href="https://www.cnblogs.com/HHshy/p/7189562.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/7189548.html
CodeForces - 592D Super M 题解 - HHshy
题目大意: 一棵树 n个点 有m个点被标记 求经过所有被标记的点的最短路径的长度以及起点(如有多条输出编号最小的起点)。 思路: 1.当且仅当一个点本身或其子树中有点被标记时该点在最短的路径上因此,可以将多余的点删去,得到新的一棵树。 2.不难发现,新树上的边必定被经过一次或两次,而且当只经过一次的
2017-07-16T00:12:00Z
2017-07-16T00:12:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 一棵树 n个点 有m个点被标记 求经过所有被标记的点的最短路径的长度以及起点(如有多条输出编号最小的起点)。 思路: 1.当且仅当一个点本身或其子树中有点被标记时该点在最短的路径上因此,可以将多余的点删去,得到新的一棵树。 2.不难发现,新树上的边必定被经过一次或两次,而且当只经过一次的 <a href="https://www.cnblogs.com/HHshy/p/7189548.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6375704.html
逆元 板子 - HHshy
逆元就是在模意义下的除法,设B/A≡r(mod p),找一个C使得A*C≡1(mod p),则B*C≡r*A*C≡B/A(mod p),则C即为A的逆元。 那么如何求逆元呢?先贤有n种方法,我就抄两个貌似比较好懂、方便的方法。 一、运用费马小定理 当p为质数时可得ap-1≡1(mod p),所以ap
2017-02-07T12:09:00Z
2017-02-07T12:09:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】逆元就是在模意义下的除法,设B/A≡r(mod p),找一个C使得A*C≡1(mod p),则B*C≡r*A*C≡B/A(mod p),则C即为A的逆元。 那么如何求逆元呢?先贤有n种方法,我就抄两个貌似比较好懂、方便的方法。 一、运用费马小定理 当p为质数时可得ap-1≡1(mod p),所以ap <a href="https://www.cnblogs.com/HHshy/p/6375704.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6371063.html
CodeForces - 425E Sereja and Sets 题解 - HHshy
题目大意: 我们有一个集合 S,其中包含了 m 个不完全相同的区间[l1,r1],[l2,r2]…[lm,rm] (1≤li≤ri≤n,li,ri 都为整数)。 定义 f(S)=k,表示集合 S 中能取出最多 k 个区间,使得这 k 个区间两两不相交。 问当 f(S)=k 时,符合条件的集合 S 有
2017-02-06T09:05:00Z
2017-02-06T09:05:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 我们有一个集合 S,其中包含了 m 个不完全相同的区间[l1,r1],[l2,r2]…[lm,rm] (1≤li≤ri≤n,li,ri 都为整数)。 定义 f(S)=k,表示集合 S 中能取出最多 k 个区间,使得这 k 个区间两两不相交。 问当 f(S)=k 时,符合条件的集合 S 有 <a href="https://www.cnblogs.com/HHshy/p/6371063.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6368228.html
SPOJ - QTREE Query on a tree题解 - HHshy
题目大意: 一棵树,有边权,有两个操作:1.修改一条边的权值;2.询问两点间路径上的边的权值的最大值。 思路: 十分裸的树链剖分+线段树,无非是边权要放到深度大的一端的点上,但是有两个坑爹的地方,改了好久: 1.数组定义10000和40000会TLE,要乘10; 2.以前的树剖求解的最后是这样的:
2017-02-05T09:51:00Z
2017-02-05T09:51:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 一棵树,有边权,有两个操作:1.修改一条边的权值;2.询问两点间路径上的边的权值的最大值。 思路: 十分裸的树链剖分+线段树,无非是边权要放到深度大的一端的点上,但是有两个坑爹的地方,改了好久: 1.数组定义10000和40000会TLE,要乘10; 2.以前的树剖求解的最后是这样的: <a href="https://www.cnblogs.com/HHshy/p/6368228.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6322949.html
[HAOI2011]Problem b 题解 - HHshy
题目大意: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y)=k。 思路: 设f(k)为当1≤x≤n,1≤y≤m,且n≤m,使gcd(x,y)=k的数对(x,y)的对数,g(k)为当1≤x≤n,1≤y≤m,且n≤m,使k|gcd(x,y)的数对(x,y
2017-01-20T07:15:00Z
2017-01-20T07:15:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y)=k。 思路: 设f(k)为当1≤x≤n,1≤y≤m,且n≤m,使gcd(x,y)=k的数对(x,y)的对数,g(k)为当1≤x≤n,1≤y≤m,且n≤m,使k|gcd(x,y)的数对(x,y <a href="https://www.cnblogs.com/HHshy/p/6322949.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6194059.html
Codeforces 486E LIS of Sequence 题解 - HHshy
题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是。 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两者相加比最长上升子序列长度+1小,则一个也不是;否则若有另一元素与它的两个值完全相同,则不是所有;否
2016-12-18T03:59:00Z
2016-12-18T03:59:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是。 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两者相加比最长上升子序列长度+1小,则一个也不是;否则若有另一元素与它的两个值完全相同,则不是所有;否 <a href="https://www.cnblogs.com/HHshy/p/6194059.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6187844.html
未完 - HHshy
#include<cstdio>using namespace std; int read(){ int x=0; char ch=getchar(); while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9') x=(x<<1
2016-12-16T09:41:00Z
2016-12-16T09:41:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】#include<cstdio>using namespace std; int read(){ int x=0; char ch=getchar(); while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9') x=(x<<1 <a href="https://www.cnblogs.com/HHshy/p/6187844.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6160311.html
ZOJ-3820 Building Fire Stations 题解 - HHshy
题目大意: 一棵树,在其中找两个点,使得其他点到这两个的距离的较小值的最大值的最小值及其方案。 思路: 首先显然一棵树的直径的中点到其他点的距离的最大值必定比其他点的小。 那么感性思考一下就将一棵树的直径平分成两段,在找分成的两棵树的直径的中点。 PS:dfs貌似要爆栈,用非递归或bfs。 代码:
2016-12-11T11:43:00Z
2016-12-11T11:43:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 一棵树,在其中找两个点,使得其他点到这两个的距离的较小值的最大值的最小值及其方案。 思路: 首先显然一棵树的直径的中点到其他点的距离的最大值必定比其他点的小。 那么感性思考一下就将一棵树的直径平分成两段,在找分成的两棵树的直径的中点。 PS:dfs貌似要爆栈,用非递归或bfs。 代码: <a href="https://www.cnblogs.com/HHshy/p/6160311.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6159418.html
UVA - 11604 General Sultan 题解 - HHshy
题目大意: 有若干模式串,将某些模式串拼接起来(一个可以使用多次)形成一个长模式串,判断能否有两种或更多种不同的拼法拼成相同的模式串。 思路: 神奇的构图,暴力的求解。 可以发现,若有不同的拼法,则一个模式串的前缀要与一个模式串的后缀相同。 因此我们就将问题转化成:从两个模式串开始,不停的按照前后缀
2016-12-11T04:41:00Z
2016-12-11T04:41:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 有若干模式串,将某些模式串拼接起来(一个可以使用多次)形成一个长模式串,判断能否有两种或更多种不同的拼法拼成相同的模式串。 思路: 神奇的构图,暴力的求解。 可以发现,若有不同的拼法,则一个模式串的前缀要与一个模式串的后缀相同。 因此我们就将问题转化成:从两个模式串开始,不停的按照前后缀 <a href="https://www.cnblogs.com/HHshy/p/6159418.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6159332.html
UVALive-4839 HDU-3686 Traffic Real Time Query System 题解 - HHshy
题目大意: 有一张无向连通图,问从一条边走到另一条边必定要经过的点有几个。 思路: 先用tarjan将双连通分量都并起来,剩下的再将割点独立出来,建成一棵树,之后记录每个点到根有几个割点,再用RMQ求LCA计算。 注意:数组范围。 代码:
2016-12-11T04:11:00Z
2016-12-11T04:11:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 有一张无向连通图,问从一条边走到另一条边必定要经过的点有几个。 思路: 先用tarjan将双连通分量都并起来,剩下的再将割点独立出来,建成一棵树,之后记录每个点到根有几个割点,再用RMQ求LCA计算。 注意:数组范围。 代码: <a href="https://www.cnblogs.com/HHshy/p/6159332.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/HHshy/p/6065377.html
[JSOI2008]完美的对称 题解 - HHshy
题目大意: 首先我们给定一点A以及对称中心S,点A'是点A以S为对称中心形成的像点,即点S是线段AA'的对称中心。 点阵组(X)以S为中心的像点是由每个点的像点组成的点阵组。X是用来产生对称中心S的,即点阵X以S为中心的像点的集合即为点阵X本身。 思路: 找到中心就要使得其位于点阵的中心,所以将每个
2016-11-15T05:41:00Z
2016-11-15T05:41:00Z
HHshy
https://www.cnblogs.com/HHshy/
【摘要】题目大意: 首先我们给定一点A以及对称中心S,点A'是点A以S为对称中心形成的像点,即点S是线段AA'的对称中心。 点阵组(X)以S为中心的像点是由每个点的像点组成的点阵组。X是用来产生对称中心S的,即点阵X以S为中心的像点的集合即为点阵X本身。 思路: 找到中心就要使得其位于点阵的中心,所以将每个 <a href="https://www.cnblogs.com/HHshy/p/6065377.html" target="_blank">阅读全文</a>