02 2023 档案
摘要:给你一个笛卡尔坐标系,现在要支持三种操作,第一种操作是添加一个点(x,y),第二种操作是删除一个点(x,y), 第三种操作是查询严格在点(x,y)右上角的点中,横坐标最小的点,如果有多个点,选择纵坐标最小的那个。 首先肯定离散化 然后考虑怎么用线段树表示二维的信息,觉得树套树也可以写,但是线段树套s
阅读全文
摘要:让你构造一个数列,满足m种限制条件,每种限制条件是l,r,x,要求构造的序列区间[l,r] 与运算的值结果为x。 注意到如果某一位上&运算的结果为1的话,该区间内所有元素都要是1 先把需要是1的地方拎出来处理,相当于区间操作,写个lazytag; 然后再考虑0,显然如果为0,区间内只要有1个0就可以
阅读全文
摘要:一看发现要求满足3个条件,有点头大 可以先把所有的bus和people拎出来,用bus的s和people的l去排序,这样能保证对于当前的people,si都合法。 然后考虑如何满足ti最小的情况下,使得fi>=bj,且ti>=rj 思想有点像dp,dp里解决二维问题,一问是拿下标做状态,然后搞偏序或
阅读全文
摘要:首先注意到gcd是满足结合率的,所以可以用线段树维护区间gcd 然后简单讨论一下什么时候只要删掉一个就可以 1,如果左区间和右区间的gcd都为x的倍数,直接return true 2,如果都不是,也都直接return false 3,如果有一个是,那么转化为子问题继续递归,出口是l==r(只能删一个
阅读全文
摘要:题意:一颗有根树,树上每一个节点有一个灯,要支持两种操作 第一种操作是统计一颗子树内开着的灯个数。 第二种操作是将一个子树内的所有灯状态改变(开灯->关灯,关灯->开灯)。 解: 经典处理方法是先把树通过dfs序拍成区间,预处理出每个结点u管理的左右端点 然后变成区间改变01状态,求和问题 01状态
阅读全文
摘要:直接用城市建点的话不好表达连边的关系 考虑把每条边看作左部点 右部点的话朴素想法是工人,但是也不好表达工人和材料的关系 发现工人的信息可以整合成一共有多少种材料,每种材料有多少人擅长 所以把材料看成右部点,城市和所需材料之间连容量为1的边,材料和汇点T之间连容量为“擅长该材料人数”的边 那基环树怎么
阅读全文
摘要:观察到n+m最多才2000个点,正解也不是差分约束 但是它能跑:) 建图比较平凡不记述 难得的是用链式前向星T了,改vector过了 T9的话是加了随机化优化,cin读入,链式前向星存边 1513ms的是没加随机化优化,scanf读入,vector存边 857ms的是没加随机化优化,scanf读入,
阅读全文
摘要:考虑怎么处理关系为0的状况 最开始写了一个分类讨论,然后发现这俩等式是矛盾的并不在一起,遂丢进垃圾箱里 但是,其实不关心谁大谁小,只要满足abs|Ai-Aj|==1就可以 根据解绝对值不等式的知识,解得: -1<=Ai-Aj<=1 yeah,现在有不等式了,怎么处理最大化极差的问题?看到不等式想到跑
阅读全文
摘要:正解据说是贪心+dp 可惜我这个人没什么脑子:) (遇到了能用差分约束也能用dp+贪心的第二题了,真是神奇 假设有一组合法的sum就能逆推出di,因为ai+di+1=sumi最小化Σdi就是最小化Σsumi考虑sumi应该满足的条件1.是递增的sumi>=sum(i-1)2.sumi<=sum(i-
阅读全文
摘要:最短路三角形不等式:Xi<=Xj+w(根据最短路的定义,要是不满足的话就不是最短路了) 给出若干个形如Xi-Xj<=w的约束条件,考虑求一组合法的解。 把问题转化成求最短路,对于Xi-Xj<=w,我们从j向i连一条边权为w的边 如果有负环的话即无解。 ...? 但差分约束难搞一点的话还要求最大解、最
阅读全文
摘要:考虑黑白染色,i+j%2==1的为黑格 一块多米诺就要覆盖一黑一白,相当于一个匹配 那全覆盖也就是存在完美匹配 (应该是网络流经典的trick? 讨论选取的点来自同一边和两边 1.同一边 任意挑选两个点去掉后左右两边个数不相等,肯定不存在完美匹配 贡献是cnt*(cnt-1)/2*2=cnt*(cn
阅读全文
摘要:根据线性代数的知识可知邻接矩阵自乘相当于做floyed 把输入转化为01矩阵(显然>1的数和1是等价的)得到邻接矩阵 问是否存在k次后所有数都为正数等价为自乘k次后所有点两两可达 转化为图论,用tarjan缩点判断scc的数目是否只有一个,或者直接bitset优化folyed也可以 #include
阅读全文
摘要:裸的tarjan 依题意有向图上i和j之间能互相到达,i和j肯定在同一个scc内 最小的代价就是Σ每个scc内最小的cost 方案就是每个scc内最小值的数的乘积 #include<bits/stdc++.h> using namespace std; const long long mod=100
阅读全文
摘要:一眼并查集 但是怎么维护,借鉴了别人的思路 如果有重叠的话端点一定要重叠,所以用端点来代表线段就可以了 但是暴力连边复杂度受不了 考虑把线段拆成两点,同色的放入一个集合,更新的时候不断合并直至size()==1(==1不erase是因为要留下r最大的,显然只有r最大的有用) #include<bit
阅读全文
摘要:很好的题 [ 观察样例发现只有0,1,2 大胆猜测是不是也只会有0,1,2 如果不是的话说明某条路径上出现过0,1,2,且是以2,1,0的情况出现的 但是2的末尾是0,和1&不可能得到1,所以假设不成立 ] 然后考虑什么时候有0 有0的充分必要条件是对于二进制的每一位,都有一个地方出现一个0 相反的
阅读全文
摘要:不用真的建图,真的建图两人之间的代价不好算。 等价转化为对给定的ai找出bi,使得bi=k*a[i],且互不相同 k的上界为n,简易证明: [ 若a[i]互不相等,全部选a[i]*n会比a[i]*(n+1)更好; 若存在一对a[i]相等,可以使其中一个数取n-1 若再存在一对,取n-1.. 必能在n
阅读全文
摘要:题意: 有n个学生,m个社团,每个学生只属于一个社团。在接下来的d天内每天会离开一个学生(再也回不来了)。 现要从剩下的每个社团中挑选一个学生组成team,并最大化他们的mex。 题解: 顺着二分图的学习摸到这里,最开始想的是正向直接加边魔改一下匈牙利,但是会超时(因为每次加新边后得到的都是新图,匈
阅读全文