随笔分类 - 洛谷
摘要:Aimee 显然的状压dp,但是还要考虑根节点。 那么把根节点也扔进去$f_{i,j}$表示i状态,有j层高。 转移的时候需要枚举i的子集,怎样保证子集合法? 可以预处理一个数组表示i状态最多可以扩展一次扩展成什么,来解决。 处理新增的部分的时候·,我们假定所有新点到根节点的距离都是我们当前枚举的k
阅读全文
摘要:Lisa 显然会形成一个图的结构,显然这玩意极有可能出现环 那咋办呢 从每一怪兽出发似乎都可以形成一个子问题。 每一个问题都是用自己所能到达的怪兽的花费来更新自己,如果自己更新了,就有机会更新自己的父亲 显然不会一直更新下去,这个环是有极限的。 所以好像出现了一个类似于spfa的结构 就是首先每个点
阅读全文
摘要:Aimee set练手 insert有一个pair的返回值,second代表插入成功没有 s .end()返回值是最后元素的下一个位置。 lowerbound是第一个大于等于 upperbound是最后一个小于等于 #include<set> #include<cstring> #include<a
阅读全文
摘要:Aimee 2-sat的模板题 显然根据题目所给内容,我们可以根据每一个菜的做法,推断出另一个菜的做法,然后连边 这样会出现一个个的环,这个环不能有矛盾 也就是满式和汉式不能同时被推出 #include<iostream> #include<cstdio> #include<cstring> #in
阅读全文
摘要:blackpink $O(n^2)$显然不过我们应该优化成$O(nlogn)$ 采用树上启发式合并 仿照树链剖分的思想,对于每一个位置,我们先处理所有的轻儿子,然后处理重儿子,统计当前节点的答案,最后把轻儿子删掉就可以了。 这样全局一个桶就够用了。 #include<iostream> #inclu
阅读全文
摘要:P3812 【模板】线性基 这是一道板子题 #include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; ll p[100]; ll ans; ll x; ll n; v
阅读全文
摘要:Jennie \(c^n_m=c^{n/p}_{m/p}*{c^{n\%p}_{m\%p}}\) 然后套上去就行了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #d
阅读全文
摘要:Jennie 结合一下上一个题的思想,先确定一下这个最大公因数可以是谁--n的因数, 所以说肯定要对n的每一个因数的倍数下手,其中去除乘起来为n的哪个外,我们要注意一下剩下的倍数要跟他互质 ‘这不就和上个题一样了 #include<iostream> #include<cstdio> #includ
阅读全文
摘要:Jennie 首先我们要知道欧拉定理 \(a^b\equiv^{b\%\phi(p)+\phi(p)}\quad b>=p\) \(a^b\equiv^{b\%\phi(p)} \quad b<p\) 然后对于这个式子,我们可以改造成 \(2^{2^{2^{2^{...}}}\%\phi(p)+\p
阅读全文
摘要:Jinsoo 用更相减损术写的 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long using namespace std; long long a,b,c;
阅读全文
摘要:Jennie 似乎对于每一个不等式,都是有一个阈值k,那么分类讨论a的符号,也就是不等式的方向,因为输入的key的大小不超过$10^6$,那么一些算出来的key可以知道肯定满足、不满足 然后呢,根据不等式的方向扔到两个树状数组,查询即可 #include<iostream> #include<cst
阅读全文
摘要:Archie 建反图,dfs #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int n,m; int x,y; struct e{ int to; int
阅读全文
摘要:Jisoo tarjan求割边 对于一条$(u,v)$,如果他是割边,那么v子树中一定有一个点s$low_s>dfn_u$ 然后改造一下搜索函数 #include<iostream> #include<cstdio> #include<algorithm> #include<stack> using
阅读全文
摘要:Jisoo 如果这玩意成不了二分图,肯定有环,而且还是肯定有一个三元环 如果一个点到两个点的距离$>k$那么这两个点之间的距离一定大于k 那么我们只要确定存不存在这样的三元组就可以了 怎么确定呢 画图可得,如果有三元环,那么这个三元环一定会存在一种包括两端点的情况 然后就显然我们要找直径,检查每一个
阅读全文
摘要:Jennie 每个单词只有两个字符,那么就在这两个字符之间连一条边。 最后n+1个字符,显然是所有单词只出现了一遍 这样我们的目标就是找一条欧拉路径就可以了 #include<iostream> #include<cstdio> #include<algorithm> using namespace
阅读全文
摘要:Rose $O(\sqrt n)$也是可以接受的对吧 化简式子得$gcd(\frac,\frac)=1$和$gcd(\frac,\frac)=1$ 然后枚举$b_1$的因子就可以了 #include<iostream> #include<cstdio> #include<cstring> #incl
阅读全文
摘要:Lisa 显然状态压缩 然后,对于一个点集S,我们很容易求出这个点集可以形成的任意图$F_S$ 这个很容易预处理出来 然后呢,对于这个直接求联通的方案书并不容易,但是,可以用总方案减去不连通的方案数。 不连通的方案视为两个点集,一个点集随便,另一个点集必须联通。 所以在预处理完了以后,我们首先要做的
阅读全文
摘要:jennie 树上dp求直径的模板 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; int n; vector<int> v[100001]; int x,y; i
阅读全文
摘要:P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组可以干这个事情 树桩数组维护一个下标啦 然后离散化一下,sort,unique,二分确定每一个数在新序列的下标 也就是第i个数大小的排名。 然后算一下有多少个数,拍在他前面且大小排名在它之前。 #inclu
阅读全文
摘要:Archie 树链刨分之后很显然就成了一条一条的链 那么用线段树维护一下就行了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,r,pp; s
阅读全文