分类: 未分类

544 篇文章

#10202. 「一本通 6.2 练习 5」樱花
Lisa 这个$n!$不如先简简单单看成n,然后可知,$x>n$且$y>n$不如令$x=n+a,y=n+b$代入原式子,可知 $a*b=n^2$ 那么a,b就是它的一对因子了 #include<iostream> #include<cstdio> #include<algorithm> #includ…
P5933 [清华集训2012]串珠子
Lisa 显然状态压缩 然后,对于一个点集S,我们很容易求出这个点集可以形成的任意图$F_S$ 这个很容易预处理出来 然后呢,对于这个直接求联通的方案书并不容易,但是,可以用总方案减去不连通的方案数。 不连通的方案视为两个点集,一个点集随便,另一个点集必须联通。 所以在预处理完了以后,我们首先要做的就是在当前集合里剥出一个点作为强制的联通集合的点,…
SP1437 PT07Z – Longest path in a tree
jennie 树上dp求直径的模板 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; int n; vector<int> v[100001]; int x…
P1908 逆序对
P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组可以干这个事情 树桩数组维护一个下标啦 然后离散化一下,sort,unique,二分确定每一个数在新序列的下标 也就是第i个数大小的排名。 然后算一下有多少个数,拍在他前面且大小排名在它之前。 #include<iostream> #inclu…
#10064. 「一本通 3.1 例 1」黑暗城堡
blackpink yyds 这道题目还是很有意思的,叫什么最短路径生成树。 显然的一个做法就是用类似于prim的方法,维护一个已经和1联通的集合以及所有点到1的最短路 然后按照距离dis的距离进行枚举,每次从集合里找到可以在加进去之后令新点补全。 然后这个过程可以懒得维护,直接检查每一个点和他周围点就行了 #include <iostrea…
P3384 【模板】轻重链剖分/树链剖分
Archie 树链刨分之后很显然就成了一条一条的链 那么用线段树维护一下就行了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,r,pp; st…
P2210 Haywire
数据范围小地可怜 那就模拟退火 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int ans[50]; int s…
#10134. 「一本通 4.4 练习 1」Dis
Archie 练习一下树刨 只要记录一下到链顶的距离以及到父亲的距离就行了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; struct e{…
P1177 【模板】快速排序
Archie 本文为倍增做法 后缀数组题 后缀数组是啥,把所有的后缀排个序就是后缀数组了 显然的暴力做法就是全部sort一遍 这不白瞎 我们利用倍增的思想,显然可以把一个字符串分成两半进行比较就可以了 引用一下wiki的图片。 这里有两个数组 $SA_i$表示第i小的后缀的编号 而$RK_i$表示第i个后缀的排完序后的编号 然后倍增,就是$O(n …
P1271 【深基9.例1】选举学生会(基数排序)
Archie 这只是一道橙题,为什么我要写呢,。 因为这个题可以用基数排序做 以下做法为基数排序+计数排序 计数排序 和桶排有所相似 首先,统计每个值的出现次数 然后呢,在值域范围内统计次数的前缀和 然后从后往前扫并统计 for(int i=m;i>=1;--i){ b[tot[3][a[i]%10]--][3]=i; } 基数排序 ​ 按照…