09 2018 档案
摘要:$dijkstra$ 算法的堆优化,时间复杂度为$O(n+m)\log n$ 添加数组$id[]$记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 cpp include"cstdio" include"cstring" include"iostream" includ
阅读全文
摘要:能到达所有路的充要条件是能到达左右两端的路 用vector反向建边对每条路左右分别求个最长不上升子序列 预处理出每条路向左向右分别需要多建多少路才能到达最左端和最右端 然后跑个$\Theta(n)$的尺取法就可以了 本题最长不上升子序列用vector+zkw线段树比二分更加好想? 原来标程的 函数尺
阅读全文
摘要:"题目链接" 此题的答案k具有可二分性 那么我们可以二分答案k,然后跑一个树形DP 令$dp[i]$表示到节点$i$时需要再多染色的点数 那么有$dp[i]=\max(\sum_{fa[j]=i} (dp[j]+1) k,0)$ 若$dp[1]=0$则答案k可行
阅读全文
摘要:【01背包】 描述:给定物品总数$n$,背包承重能力$m$,物品价值$v[i]$,物品重量$w[i]$,求满足不超过背包承重能力的物品最大价值,每种物品只有一件。 解法: 设$f[j]$表示物品总重为$j$时,物品的最大总价值。 那么转移方程为 正确性:每次转移时$f[j w[i]]$尚未被物品$i
阅读全文
摘要:康托展开 首先我们知道对于一个有n个元素的集合,有 $$\sum_{i=1}^n A_{n}^i =n!$$ 我们将该集合全排列按字典序从小到大排序 那么我们就可以用一个数x表示该集合的某个排列在全排列中的位置 显然变化的最高位(记作$maxn$)上的数每增加1,后面的$(maxn 1)$位就跑了一
阅读全文

浙公网安备 33010602011771号