随笔分类 -  hdu

摘要:构造一个01矩阵,其中格子$(i,j)$​​​​​对应于第$ik+j$​​个​​​的位置(其中$0\le i<\lceil\frac{n}{k}\rceil,0\le j<k$​​​,位置从0开始编号)​​,那么问题即有以下限制: 1.$(\lceil\frac{n}{k}\rceil-1,j)$( 阅读全文
posted @ 2021-08-02 15:02 PYWBKTDA 阅读(195) 评论(0) 推荐(0)
摘要:显然可以费用流来做,具体建图如下—— 点集:源点,汇点,左边$n$​个工人,右边$n$​​​个设备 边集:源点向第$i$​个工人连$(1,a_{i})$​的边,第$i$​个设备向汇点连$(1,b_{i})$​​​的边,工人向可用的设备连$(1,0)$​的边 跑最小费用最大流,流量为$i$时的费用即为 阅读全文
posted @ 2021-08-01 22:29 PYWBKTDA 阅读(155) 评论(0) 推荐(0)
摘要:注意到一个人的三条链一定不会同时选(忽略仅选一个终点的限制),因为其有公共点(起点) 换言之,问题相当于给定$3m$条链,选择$m$条没有公共点的链,并最小化代价和 进一步的,显然也不存在多于$m$条且没有公共点的链,因此"选择$m$条链"也可以理解为选尽量多的链(若选不到$m$条链即为-1)的同时 阅读全文
posted @ 2021-08-01 16:59 PYWBKTDA 阅读(88) 评论(0) 推荐(0)
摘要:将询问拆成$x$​到$lca$​和$lca$​($lca$​靠近$y$​的儿子)到$y$​​两部分,分别处理(后者以前者的答案为基础) 两者是类似地,不妨仅考虑前者:用树剖将该询问拆成dfs序上若干个区间,考虑从后往前遍历dfs序(显然即从下到上),若当前位置被覆盖则执行该节点的操作 进一步的,考虑 阅读全文
posted @ 2021-08-01 11:23 PYWBKTDA 阅读(85) 评论(0) 推荐(0)
摘要:记$m=10$,即商品的种类 记$g(x)=1+\sum_{i=1}^{m}a_{i}x_{i}$,问题即求$f_{n}(x)=g^{n}(x)$非0项数(模2意义下) 注意到$f^{2}(x)\equiv f(x^{2})(mod\ 2)$,这是因为如果所选的项在两边不同,那么交换后即会抵消 令$ 阅读全文
posted @ 2021-07-16 16:08 PYWBKTDA 阅读(60) 评论(0) 推荐(0)
摘要:最简单的是利用Min25筛求$h(n)$的过程,即 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 1000005 4 #define ll long long 5 int K,vis[N],P[N],h[N<<1]; 6 l 阅读全文
posted @ 2021-02-09 17:32 PYWBKTDA 阅读(140) 评论(0) 推荐(0)
摘要:(首先这道题有更为简单的dp+差分的做法,但以下为概率生成函数的做法) 第一问: 定义$f_{i}$表示(恰好)在第$i$个数结束的概率,$g_{i}$表示前$i$个数仍未结束的概率,则有$\frac{g_{i}}{m^{n-1}}=\sum_{j=1}^{n}\frac{f_{i+j}}{m^{n 阅读全文
posted @ 2020-12-30 14:02 PYWBKTDA 阅读(130) 评论(0) 推荐(0)
摘要:$lyndon\ word$(以下简写为Lw):对于一个字符串s,其为Lw当且仅当其的最小后缀为自身 性质:若$u<v$为LW,那么$uv$也为Lw(反证法即可证) $lyndon$分解:将一个字符串分为$s=s_{1}s_{2}...s_{k}$,满足$\forall 1\le i\le k$,有 阅读全文
posted @ 2020-07-22 11:45 PYWBKTDA 阅读(183) 评论(0) 推荐(0)
摘要:记一条链两端的lca为该链的lca,f[i]表示所有lca在i子树内的链的最大价值和(为方便递推,假设存在i-i的链价值为0),有递推式$f[i]=max(\sum_{son}f[son]+val)$(其中son是链上所有点的儿子且不再链上的节点,val表示该链的价值),时间复杂度为$o(n^{2} 阅读全文
posted @ 2019-11-06 09:47 PYWBKTDA 阅读(145) 评论(0) 推荐(0)
摘要:考虑分别求出RG和GB的最小生成树,然后剩下的边中肯定选择较小的边加入这两颗生成树 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 105 4 struct ji{ 5 int x,y,z; 6 char s[11]; 7 } 阅读全文
posted @ 2019-10-15 13:08 PYWBKTDA 阅读(212) 评论(0) 推荐(0)
摘要:将两棵树分别按照深度分块,即每$\sqrt{n}$深度分为一块对于两棵树任意两个块的根对,统计其中公共的节点并计算出答案(用按秩合并并查集),复杂度为$o(n\sqrt{n}logn)$(其实这玩意是可以被卡掉的,因为这种分块无法保证块的大小和数量) 1 #include<bits/stdc++.h 阅读全文
posted @ 2019-10-15 13:07 PYWBKTDA 阅读(228) 评论(0) 推荐(0)
摘要:考虑对一个集合求莫比乌斯反演的过程,最终答案即$\sum\limits_{d|ai}\mu(d)\cdot calc(d)$(calc(d)表示i子树中d倍数的个数)dfs时维护当前遍历到的点中i倍数的个数,对i搜之前和i搜完后差分一下就可以得到i子树的信息,用上述式子计算即可 1 #include 阅读全文
posted @ 2019-10-15 13:06 PYWBKTDA 阅读(162) 评论(0) 推荐(0)
摘要:考虑每一条非树边都连接了祖先和儿子,类似于序列上的问题,从底往上算,当发现如果走到某个环的祖先,且这个环中还没有被选到,那么就将最浅的那条边贪心选择即可具体实现可以使用bitset维护当前子树的询问,如果这条边选了,那么bitset清空,否则和父亲合并 1 #include<bits/stdc++. 阅读全文
posted @ 2019-10-15 13:05 PYWBKTDA 阅读(175) 评论(0) 推荐(0)
摘要:首先要知道一个式子:$\mu(lcm(i,j))=\mu(i)\cdot \mu(j)\cdot \mu(gcd(i,j))$(分是否为0讨论)令$d=gcd(i,j)$,$n'=\lfloor n/d \rfloor$,$m'=\lfloor m/d \rfloor$$\sum \mu(lcm(i 阅读全文
posted @ 2019-08-25 06:56 PYWBKTDA 阅读(323) 评论(0) 推荐(0)
摘要:首先计算出以1为左端点的所有区间的mex,考虑删除左端点仍然维护这个序列:设当前删除点下一次出现在y,y~n的mex不变,从左端点到y的点中大于删除值的点要变成删除值,因为这个是不断递增的,所以是一段区间,可以用线段树来维护。 1 #include<bits/stdc++.h> 2 using na 阅读全文
posted @ 2019-08-20 12:24 PYWBKTDA 阅读(195) 评论(0) 推荐(0)
摘要:设f[i]表示从点i逃出去的期望步数,显然有递推式$f[i]=Ki\cdot f[1]+(1-Ei-Ki)/s[i](f[fa]+1+\sum_{son}(f[son]+1))$(其中r[i]表示点i的度)。这个用高斯消元复杂度高达三次,无法通过,但可以发现每一个点一定可以用$f[i]=a*f[1] 阅读全文
posted @ 2019-08-11 07:12 PYWBKTDA 阅读(69) 评论(0) 推荐(0)
摘要:考虑LIS的一种求法:维护每一个长度的最小结尾,此时这个序列只与每一个数字有没有出现有关,用2^10状压,状压+数位dp即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 int t,k,a[21] 阅读全文
posted @ 2019-08-09 13:42 PYWBKTDA 阅读(140) 评论(0) 推荐(0)
摘要:一棵子树的每一个儿子相当于划分一个区间,同时这些区间一定要存在一个点连续(直接的儿子),因此每一棵树最多只有两个儿子存在子树,并且这两个儿子所分到的区间一定是该区间最左和最右两段,所以ans*=(son)!(没有儿子的点任意排列)*2(两棵子树可以选择最左和最右),注意根节点还有两种划分方式,但当n 阅读全文
posted @ 2019-08-07 19:54 PYWBKTDA 阅读(108) 评论(0) 推荐(0)
摘要:很难考虑矩形覆盖的问题,但可以考虑每一个点被覆盖的概率/期望(把矩形分成九部分后容斥即可),sigma起来即答案 1 #include<bits/stdc++.h> 2 using namespace std; 3 int t,n,m,k; 4 long long s,sum; 5 double a 阅读全文
posted @ 2019-08-07 19:53 PYWBKTDA 阅读(101) 评论(0) 推荐(0)
摘要:1.直接令x=0,为了判断这一信息,对于所有含有多个1的yi,必然是无用的,答案至少为n且不能含有多位1的y2.令yi=2^(i-1),由此发现一定可以得到x每一位的答案,即答案最多为n。因此,发现方案数即n!,当$n\ge p$时答案一定为0,时间复杂度为o(p) 1 #include<bits/ 阅读全文
posted @ 2019-07-28 19:58 PYWBKTDA 阅读(323) 评论(0) 推荐(0)