摘要: 【算法】树链剖分+线段树 【题解】 树链剖分算法:http://www.cnblogs.com/onioncyc/p/6207462.html 定义线段树结构体有l,r,lc,rc,sum,data。 lc表示左端颜色,rc表示右端颜色,sum表示颜色种类,data表示区间置为同一个数的标记。 修改 阅读全文
posted @ 2016-12-22 19:11 ONION_CYC 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 【算法】树链剖分+线段树 【题解】模板题,见http://www.cnblogs.com/onioncyc/p/6207462.html 调用线段数时要用新编号pos[i] !!! #include<cstdio> #include<cctype> #include<algorithm> using 阅读全文
posted @ 2016-12-21 19:53 ONION_CYC 阅读(294) 评论(0) 推荐(0) 编辑
摘要: ★ 无向无环连通图=树 树上路径问题除了考虑树链剖分,还可以考虑离线树上差分。 树上路径差分:x到根+y到根-lca(x,y)到根+fa[lca(x,y)]到根 【最近公共祖先(LCA)】 http://blog.csdn.net/wendavidoi/article/details/5067005 阅读全文
posted @ 2016-12-21 13:51 ONION_CYC 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 【算法】最短路(spfa) 次短路 【题解】 正反跑两次SPFA,然后枚举每一条边,如果起点到一个端点的最短路+另一个端点到终点的最短路+长度 ≠ 最短路,则和答案比较,保存最小值。 #include<cstdio> #include<cstring> #include<algorithm> usi 阅读全文
posted @ 2016-12-20 21:03 ONION_CYC 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 【算法】贪心&&堆 【题解】反过来看就是合并任意两块木板,花费为木板长度之和。 显然从最小的两块开始合并即可,用堆(优先队列)维护。 经典DP问题石子归并是只能合并相邻两堆石子,所以不能贪心。 手写堆版本见http://www.cnblogs.com/onioncyc/p/6212840.html 阅读全文
posted @ 2016-12-19 21:48 ONION_CYC 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树 #include<cstdio> #include<cctype> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f,maxn=50010; struct tree{int l,r,mins,maxs; 阅读全文
posted @ 2016-12-19 21:07 ONION_CYC 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 【算法】扩展欧几里德算法(模线性方程) 【题解】http://hzwer.com/2121.html 一些问题写在http://www.cnblogs.com/onioncyc/p/6146143.html PS:下述代码有问题,具体看上面网站。 #include<cstdio> #include< 阅读全文
posted @ 2016-12-09 14:10 ONION_CYC 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 【算法】欧几里德算法 【题解】紫书原题 #include<cstdio> #include<algorithm> using namespace std; const int maxn=10010; int T,t,n,a[maxn]; int gcd(int a,int b) {return b= 阅读全文
posted @ 2016-12-08 20:07 ONION_CYC 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 【数论】数论——onion_cyc 【计数问题】计数问题(排列组合,容斥原理,卡特兰数)——onion_cyc 【概率与期望】链接 【链与反链】链接 【生成树计数(矩阵树定理)】专题链接 【快速幂】 原理:将指数化为二进制再分为若干个数相乘。 每次自己乘自己相当于平方,增加二进制权。 int qui 阅读全文
posted @ 2016-12-08 19:25 ONION_CYC 阅读(1078) 评论(0) 推荐(0) 编辑
摘要: 【算法】扩展欧几里德算法 【题解】学完扩欧就可以随便水了。。。 转化为不定方程ax-by=1。 因为1且题目保证有解,所以方程有唯一解。 紫书曰:同余方程的一个解其实指的是一个同余等价类。 所以满足x≡x'(mod b)的其他x'也是方程的解。 题目求最小正整数解,因此ans=x%b。 #inclu 阅读全文
posted @ 2016-12-08 19:24 ONION_CYC 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 【算法】DP+斜率优化 【题解】状态转移方程:f[i]=min(f[j]+g(i+1,j-1))+c[i] 关键在于如何O(1)计算g(i+1,j-1)。 推导过程:http://blog.csdn.net/PoPoQQQ/article/details/40504949 当d(j,k)中j<k且k 阅读全文
posted @ 2016-12-05 19:19 ONION_CYC 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 【动态规划杂记】状态+转移 参考:夜深人静写算法(二) - 动态规划 核心:划分阶段-状态表示-状态转移方程。 复杂度:状态数O(n^t),转移O(n^e),则称为tD/eD问题。 1.最优化问题和方案数问题常考虑DP,特定数问题不考虑DP。 2.断层思想:划分状态,从计算过的状态去答案,这就是无后 阅读全文
posted @ 2016-11-29 14:17 ONION_CYC 阅读(1894) 评论(0) 推荐(1) 编辑
摘要: 【算法】点双连通分量 【题解】详见《算法竞赛入门竞赛入门经典训练指南》P318-319 细节在代码中用important标注。 #include<cstdio> #include<algorithm> #include<vector> #include<stack> #include<cstring 阅读全文
posted @ 2016-11-11 20:21 ONION_CYC 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 【算法】边双连通分量 【题意&题解】http://blog.csdn.net/geniusluzh/article/details/6619575 (注意第一份代码是错误的) 一些细节: 1.判断桥只能在树边判断,不能在反向边判断,体现在程序中注释的wrong位置。 2.标记桥要双向标记。 3.第二 阅读全文
posted @ 2016-11-10 21:17 ONION_CYC 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 【算法】二分查找 【题解】最小值最大化问题。 从1..l内二分枚举答案,将每个答案最少移开的石头数与最大移开数m比较。 精简写法学自:https://vijos.org/p/1981/solution(核糖核酸) #include<cstdio> #include<algorithm> using 阅读全文
posted @ 2016-09-27 20:58 ONION_CYC 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 【算法】(强连通分量)并查集 【题解】 1.用tarjan计算强连通分量并缩点,在新图中找入度为0的点的个数就是答案。 但是,会爆内存(题目内存限制64MB)。 2.用并查集,最后从1到n统计fa[i]==i的数量即是答案。(n个点n条有向边,连通子图个数就是答案) (tarjan) #includ 阅读全文
posted @ 2016-09-23 19:26 ONION_CYC 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 【题意】给定n个点的有向图,求可达点对数(互相可达算两对,含自身)。n<=2000。 【算法】强连通分量(tarjan)+拓扑排序+状态压缩(bitset) 【题解】这题可以说非常经典了。 1.强连通分量(scc)内所有点可互达,对答案的贡献为cnt[i]*cnt[i](cnt[i]第i个scc内点 阅读全文
posted @ 2016-09-21 21:07 ONION_CYC 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 【题意】给定n个点m条边的有向图,求多少个点能被其它所有点到达。n<=10000,m<=50000。 【算法】强联通分量(tarjan) 【题解】如果有k个点能从除自己外的所有点到达(即k个答案点),那么这k个点一定在一个连通块中。 tarjan缩点构建新图,那个所有答案点都被缩成了一个点。出度为0 阅读全文
posted @ 2016-09-20 13:36 ONION_CYC 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 #include<cstdio> const int maxn=45; int n,a[maxn][maxn]; int main() { scanf("%d",&n); int x=1,y=n/2+1; a[x][y]=1; for(int i=2;i<=n*n;i++) { if( 阅读全文
posted @ 2016-09-20 13:27 ONION_CYC 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 【算法】状态压缩型DP 【题解】http://www.cnblogs.com/xtx1999/p/4620227.html (orz) https://www.cnblogs.com/zbtrs/p/6189240.html dp[i][j][k]为前i行已经放了j个国王并且第i行的状态为k(二进制 阅读全文
posted @ 2016-09-12 20:05 ONION_CYC 阅读(266) 评论(0) 推荐(0) 编辑