摘要:
主要被坑在了询问上(说的好像修改可以坑人一样 设已经超过s的数有k个。 如果k>=c那么显然可行 否则如果剩下的数的和>=(c-k)*s的话则有解,否则无解 简单证明一下 : 如果sum>=(c-k)*s,由于每个数都是小于s的,所以剩下数的个数>=(c-k)*s/(s-1)>(c-k),所以必然可 阅读全文
摘要:
题意 : 给你一棵树,每个节点有点权,树上的每一个联通子图的价值为联通子图中所有节点点权的or和。求这棵树所有联通子图价值和。 显然可以去考虑增量计算,假如我们有了一棵树,在这棵树上加入一个节点会对答案有多少贡献呢? 考虑对于多出来的联通子图,一定且必须包含有新加入的这个节点才是一个没被计算过的联通 阅读全文
摘要:
维护前缀和,枚举区间起点l,则满足条件的区间结尾r必须满足L<=pre[r]-pre[l]<=R 用值域线段树维护即可 代码 : 阅读全文
摘要:
一开始想到过用莫队,没有想出来怎么去转移。。。 事实上对于一个子串是p的倍数的串有一个性质,就是开头和结尾的后缀串的余数相同,这个还是好理解的。 假设一个子串[l,r]数值为t,设t=xp,这个子串结尾对应的原串后缀[r+1,n]数值为t',设t'=y*p+r 那么这个串开头对应原串的后缀[l,n] 阅读全文
摘要:
可以注意到题目中所说合法序列的充要条件是对于所有i,<=i的数至少出现过i次 那么我们可以设dp[i][j]代表小于i的数已经出现了j次 那么转移方程就很显然了 dp[i][j]=segma(dp[i-1][k]*C[j-k-ap[i]][n-m-(k-tl[i-1])]) (k+ap[i]<=j) 阅读全文
摘要:
暴力预处理出可行点对,拆点后跑最小费用最大流,费用取负 连边要对连,就是x->y和y->x都要连,最后除2才是答案 因为这里每个数只能匹配一次,对连的话同一个点两边都会采用同样的连法所以可以避免多次匹配 代码: 阅读全文
摘要:
可以用dfs做,但是精度会有点炸,之后就是各种取对数或者模意义下的运算。。。 不过这道题可以用long double水过去。。。- -| 代码: 阅读全文
摘要:
SW算法是求全局最小割的一种O(n^3)算法,虽然可以用堆优化到O(n^2logn),但在稠密图上效果好像并不太好。 算法流程 :1)设图G的min_cut=INF 2)设集合A为空集,w为累计权,随机选一个节点s,将s加入A,将所有与s相连的点i的wi加上s->i的边权 3)选出一个w值最大的不在 阅读全文
摘要:
栈模拟dfs,学到了新姿势 这种题很显然应该用虚树去搞,之前也没写过虚树 具体来说就是先维护dfs序,之后每次询问按dfs序排序后一个一个压入栈内,相当于dfs中的进入递归 如果当前压入栈中的元素与之前栈顶元素的Lca深度小于栈顶元素,那么就把栈顶元素弹出,相当于dfs中的返回 虚树上就很好dp了, 阅读全文
摘要:
费用流 把每个工人点拆成n个,代表是修的倒数第几辆车,这样费用就很好设定了。 总体构图 : 源点向所有顾客连边(1,0) 所有工人点向汇点连边(1,0) 顾客向工人点连边,第i位顾客向第j个工人拆出的第k个点连边(1,k*cost[i][j]) 代码 : 阅读全文