Live2D
摘要: 新博客地址: shinegeek.gitee.io 阅读全文
posted @ 2019-06-24 17:32 SHGEEK 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 这道题的树没说明父亲和儿子的输入顺序,以前也遇到过,蛋疼 思路: 1)ans=总点数-隔离了的点数 2)第i次隔离的边一定是深度为i的点和深度为i-1的点的连边,所以用vector存每层的点 3)预处理f[i]储存以i为根的子树的点数 4)已经被隔离了的点就不用了搜惹 5)由于隔离了的点数是单调递增 阅读全文
posted @ 2019-02-19 22:19 SHGEEK 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 洛谷AC10道蓝题纪念 直接暴力搜索顺子、带牌 搜索完每一层后,出完剩下的牌,因为一种牌只有一张、两张、三张、四张的情况,所以一定可以一次出完,保险起见,还是算一下为好(以防万一数据不好) 代码: 阅读全文
posted @ 2019-02-19 11:25 SHGEEK 阅读(183) 评论(1) 推荐(0) 编辑
摘要: 一开始不知道toposort可以做,写了个记忆化搜索,结果T了qwq 然后一看题解,豁然开朗,本蒟蒻见识浅短,还不曾知道还有这种操作 设 f[i] 是以i结尾的最长链个数,那么 f[i]=∑f[k] (k有一条出边指向i) 然后统计出度为0的点i的f[i],累加就是ans 这一过程显然可以在topo 阅读全文
posted @ 2019-02-17 20:38 SHGEEK 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 一道经典的拓扑排序的题目 原题链接 首先,对于一条路径中的点,没出现的一定比出现了的低级,所以在这两个点间连边 然后toposort算最长链 代码: 阅读全文
posted @ 2019-02-17 15:12 SHGEEK 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 这也是洛谷P3379 【模板】最近公共祖先(LCA)的代码 1.首先预处理upto[i][j]表示点i向上跳2j 个点到达的点,d[i]表示i的深度 2.然后把两个被询问的点搬到同一深度,具体操作是: 假设深的点为a,那么a每次把a迭代为 upto[a][log2(d[a]-d[b])] ,直到d[ 阅读全文
posted @ 2019-02-17 12:05 SHGEEK 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 用来查询区间最值(区间和,差等要处理重复部分) 下面均以以最大值为例 初始化 0(nlogn) 设st[i][k]为下标i开始的2k个元素的最值 则: st[i][k]=max{st[i][k-1],st[i+2k-1][k-1]} 即区间[i,i+2k -1]的前一半和后一半的最值取最大 查询 O 阅读全文
posted @ 2019-02-14 17:18 SHGEEK 阅读(137) 评论(2) 推荐(0) 编辑
摘要: 配对堆是一种可并堆(可以将两个堆合并,且速度快),时间复杂度: 合并merge:O(1) 插入push:O(1) 弹出pop:O(logn) 配对堆不是二叉堆(我一开始不知道这个所以一直搞不懂) 配对堆存树的方式不一样,如图,对于每个节点,有一条边指向最左边的儿子,一条指向他右边的兄弟 和普通树的对 阅读全文
posted @ 2019-02-14 10:49 SHGEEK 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 原题链接 对于两个队列a,b,求怎么每次只序列中交换相邻两个数使∑(a[i]-b[i])2 最小,输出次数对99,999,997取余 展开得:∑a[i]2+b[i]2 -∑2a[i]b[i] 而∑a[i]2+b[i]2 是不变的,所以只要最大化∑2a[i]b[i]即可。 首先可以确定,对两个序列的变 阅读全文
posted @ 2019-02-13 21:44 SHGEEK 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 今天学历配对堆,然鹅我把普通的堆忘了,配对堆也听得云里雾里。。。现在自己来现场yy一下 手写堆 push就把元素放到最后面,不断把他和父亲比较,上浮 pop就把堆顶和最后一个元素交换,然后对交换后的堆顶不断和他的左右儿子比较(选左右儿子中优先级高的比),下沉,最大下沉到最后一个元素下标-1的位置,然 阅读全文
posted @ 2019-02-13 19:45 SHGEEK 阅读(303) 评论(1) 推荐(0) 编辑