摘要: 二分答案,大于二分值的边直接不走,看最后是否存在一条路径即可 c++ include include include include include using namespace std; define debug(x) cerr 1; if(SPFA(g[mid])) { ans = g[mid 阅读全文
posted @ 2018-11-06 21:23 Zolrk 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 设dp[i][j]表示到第i个点一共经过j个点时的最小路径长度,按拓扑序转移就好了 考虑到到达第i个点并且目前走过的点数量固定时,显然不需要知道以前走的是哪些点,只要保证此时路径长度最短,就会得到更优的答案 注意到k不会超过int,所以数组不需要开longlong(开了会爆内存。。。)判断的时候强转 阅读全文
posted @ 2018-11-04 17:05 Zolrk 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 虽然这题显然可以DP。。。但是不能直接当背包来处理,因为没有所谓的上界 但是只拿部分分也是可以背包来做的 好吧先说正解,首先应该分析题有什么性质再DP,如果说确实找不到性质那就DP吧... 但是这题...闪烁,跑步互相独立,假设最优解有闪烁,休息,跑步这几种操作,那么可以先把闪烁和休息提前进行,跑步 阅读全文
posted @ 2018-11-03 11:08 Zolrk 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 设f[i]表示还剩i个没买,那么可以有式子f[i] = (n i) / n f[i] + i/n f[i 1] + 1 抽到已经抽到过的,或者是没抽到过的 这个状态其实也可以某方面地说成,抽i个的期望花费,但是我这里抽i个不是随便抽i个,而是说如果存在一种方案,这个方案抽取顺序是1 ~ n,那么从第 阅读全文
posted @ 2018-11-02 21:33 Zolrk 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 因为是两串排列,所以两串值相同位置不同 那么公共子序列要求的就是值相同,而“子序列”要求的是值的位置上升 那么把ab串联系起来,b和a相同的值,位置不同。 设$fb_i$ 为值为bi的数在a串中的位置,显然已经满足相同 那么只要取出一个最长子序列即可,若f值上升,则位置递增,则说明这些bi在a中可以 阅读全文
posted @ 2018-11-02 19:59 Zolrk 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 用树状数组求逆序对的时候注意:要统计b[i] 1的前缀和,因为可能有相同值的元素 不去重离散化: c++ sort(a+1, a+n+1, cmp); for(int i=1; i include include include using namespace std; const int MAXN 阅读全文
posted @ 2018-11-02 18:24 Zolrk 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 这道题是一类树的瓶颈问题。 题意是求两点路径上的最大的最小边(在图中,两点之间路径不只一条),那么肯定这条 最小边存在于最大生成树上 。(反证法证明) 同理, 若求最小的最大边,这条最小边一定在最小生成树上 因此我们可以将图的问题转化为树上问题。树上两点之间的路径一定经过lca,因此这条路我们可以由 阅读全文
posted @ 2018-11-02 16:36 Zolrk 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 对顶堆,维护第k大 考虑维护一个大根堆,一个小根堆。 这两个堆总大小为当前区间长度,我们维护两个性质: 1.小根堆总比大根堆多一个元素 2.小根堆所有元素都大于大根堆元素 这样小根堆的堆顶就是区间中位数。 当需要加入一个新元素时,如果这个元素比小根堆堆顶要大,就加入小根堆中,反之则加入大根堆,这样可 阅读全文
posted @ 2018-11-02 14:38 Zolrk 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 问题是求一个数往右边看,在遇到大于等于他本身的之前,有多少个比他小的数 正难则反,转化问题为一个数能被多少个数看到,算贡献,那么这些的和就是答案 用单调栈去处理,把栈里的比当前处理的数要小于等于的全弹掉,剩下的那些就是严格比这个数大的,也就是可以看到这个数的 ans要开long long c++ i 阅读全文
posted @ 2018-11-02 14:23 Zolrk 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 虽然说通过组合数递推公式可以看出来$C(i,j)=C(i 1,j 1)+C(i 1,j)$ 就是杨辉三角公式,但是还是有一个很关键的差别...就是当j=1时这个公式不太管用...比如说$C_3^1$ 表示从三个东西里面选一个,有三种选法,这个就需要提前处理了... 矩阵前缀和搞一下就好了 求组合数的 阅读全文
posted @ 2018-11-02 14:22 Zolrk 阅读(81) 评论(0) 推荐(0) 编辑
摘要: f(s)表示消灭s集合的小猪所需要的最小数量,考虑到n很小,最大才18,,用二进制来表示状态,0为第i个只小猪没有被消灭,1为第i只小猪被消灭了,就像010001010101这样的,最后求的就是111111111111111这样状态的值 P[i]表示所有可能的抛物线 需要注意的是,每条抛物线能够干掉 阅读全文
posted @ 2018-11-02 14:14 Zolrk 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 直接做多重背包复杂度太高了,我们想想是什么因素限制了如此高的复杂度 如果没有硬币个数的限制呢?直接用完全背包预处理后查询就好了 那么现在考虑一个较为简单的问题,只有一种硬币有限制 设dp[s]为买了价值为s时的方案数,先 暂时当做 完全背包预处理出dp数组 若那个 唯一 被限制硬币的面值为c,个数为 阅读全文
posted @ 2018-11-02 07:29 Zolrk 阅读(116) 评论(2) 推荐(0) 编辑
摘要: 我被博弈的P position和N position的定义限制了思想 实际上我可以先寻找必胜态,然后用定义来证明这个必胜态 这是一个环,题目说至少存在一条边数值为0,先考虑简单问题,整个环只有一个0,那么从起点开始,先手不断取0,“迫使”后手不断往0靠近,可以证明的是先手决定方向,后手不能违背这个方 阅读全文
posted @ 2018-11-01 19:14 Zolrk 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 交到洛谷上只有80分。。。 注意初始值 l = 1, r = 0 然后就是修改的部分(revise) 我套用了之前的习惯,直接传值进去,直接f[col]+=k 然后判断是否为1或者0,但是我没有想到1可以是0+1得来也可以是2 1得来 所以想安全一点就写if和else吧。。。有时候真的难以想到这种可 阅读全文
posted @ 2018-10-31 19:11 Zolrk 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 这道题有着一个 转化思想 $k \bmod i \Leftrightarrow k i \lfloor\frac{k}{i}\rfloor$ 所以有$ans = \sum_i^n (k i \lfloor\frac{k}{i}\rfloor) =n k \sum_i^n(i \lfloor\frac 阅读全文
posted @ 2018-10-30 21:22 Zolrk 阅读(101) 评论(0) 推荐(0) 编辑