12 2019 档案

摘要:我们把所有点分成四类 $A_{0,0},A_{0,1},A_{1,0},A_{1,1}$ 发现如果$A_{0,0}+A_{1,1} > 0$并且$A_{0,1}+A_{1,0} > 0$或者$A_{0,0}+A_{0,1} > 0$并且$A_{1,0} + A_{1,1} > 0$,这样可以直接得出 阅读全文
posted @ 2019-12-30 15:40 19992147 阅读(335) 评论(4) 推荐(0) 编辑
摘要:暴力 把区间按左端点排序 然后用set维护右端点 暴力加边 加到n条不加了即可 然后dfs一遍判断 比赛的时候想到了前一半 但是没想到加到n条跳 一直想合并已经连接的点 希望均摊比较小 然后就爆炸了 问题出在思考判是否是树的地方 思维僵化 #include <bits/stdc++.h> using 阅读全文
posted @ 2019-12-20 01:05 19992147 阅读(351) 评论(0) 推荐(0) 编辑
摘要:其实我们发现一个人欠债跟债主是谁没关系 因为总和是不变的 然后根据题目给出的操作 我们希望账面数字尽量小 于是我们每次随便选一正一负 让正的借钱给负的 这样账面数字就会减小 于是贪心选取即可 其实也不是贪心 可以说是任意选取 复杂度$O(n)$ 比赛的时候陷入思维误区 不断向图论方向想 得出跟这差不 阅读全文
posted @ 2019-12-18 22:56 19992147 阅读(182) 评论(0) 推荐(0) 编辑
摘要:dfs 本质上这道题是求割点所在子树大小,但是由于只有两个点,所以直接$dfs$求即可 #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; int n, m, a, b, ca, cb; int vis[ma 阅读全文
posted @ 2019-12-17 18:39 19992147 阅读(110) 评论(0) 推荐(0) 编辑
摘要:dp $dp[i][j][k]$表示第一个串匹配到$i$,第二个串匹配到$j$,前缀和为$k$ 由于前缀和不会超过$n$,所以直接$bfs$转移即可 输出方案记录$dp$前继即可 时间复杂度$O(n^3)$ #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2019-12-17 18:37 19992147 阅读(149) 评论(0) 推荐(0) 编辑
摘要:组合数学 假设当前枚举到了位置$i$ $a$ : $i$之前的$($$b$ : $i$之后的$)$$c$ : $i$之前的$?$$d$ : $i$之后的$?$ 那么当前位置对于答案的贡献是 $$\sum{a + i \leqslant b + j}{\tbinom{c}{i} \tbinom{d}{ 阅读全文
posted @ 2019-12-11 21:09 19992147 阅读(175) 评论(0) 推荐(0) 编辑
摘要:线段树+set 按时间扫描线,对于每个位置维护当前位置商店的同类型商店的前继 每次查询二分答案,设当前位置为$p$,二分大小为$mid$,那么希望$[p-mid,p+mid]$覆盖了所有类型 等价于$(p+mid,inf)$之间所有商店的前继位置都大于等于$p-mid$ 时间复杂度$O(nlog^2 阅读全文
posted @ 2019-12-10 16:49 19992147 阅读(124) 评论(0) 推荐(0) 编辑
摘要:费用流 反过来做,考虑什么情况下不行 对于三个点,当一个点出度为$2$时不形成三元环 设$x$度数为$d_x$,那么不形成的三元环就是$\frac{d_x(d_x-1)}{2}$ 建图,一边是点,一边是边,边向汇连容量为$1$费用为$0$的边 点连向对应边 原点向点连$n-1$条边,费用递增 跑最小 阅读全文
posted @ 2019-12-06 22:12 19992147 阅读(165) 评论(0) 推荐(0) 编辑
摘要:线段树套set+最短路 问题在于一次更新的点太多,如果按点扫描复杂度太高 发现一次更新的边是一样的,按边跑最短路,一个点被访问就删除,每次矩形查询用线段树套$set$ 均摊复杂度$O(nlog^2n)$ #include <bits/stdc++.h> using namespace std; co 阅读全文
posted @ 2019-12-03 21:41 19992147 阅读(115) 评论(0) 推荐(0) 编辑