摘要: 一开始没看到要保证最后是树……所以一定要从叶子开始删 枚举重心,如果k是偶数,那么按当前重心提起来deep大于k/2的全都要切掉,这样枚举重心然后取min即可 奇数的话就是枚举直径中间的边,然后从两边的点分别dfs删点 cpp include include using namespace std;阅读全文
posted @ 2019-05-22 19:36 lokiii 阅读(2) 评论(0) 编辑
摘要: 首先把点权归到边上,设点权较小的一个点是v,也就是(u,v)的边权是log2(dis(u,v)) a[v]+a[v]+a[u] 然后还有一个性质就是这棵树按点权最小点提起来就是一个堆 暴力是n^2的MST,然后考虑优化,按照点权从小到大加入生成树,那么每个点加进去的时候会连到点权比他小的点上 因为l阅读全文
posted @ 2019-05-11 17:38 lokiii 阅读(8) 评论(0) 编辑
摘要: 如果枚举d来dp,那么就是设f[u][0/1]为u点不断/断掉和父亲的边,然后优先选取f[v][1]+w(u,v) include include include include using namespace std; const int N=300005; int n,du,v[N],d[N],阅读全文
posted @ 2019-05-11 10:26 lokiii 阅读(7) 评论(0) 编辑
摘要: 首先考虑只满足第一个条件,二分答案,把过期时间加上mid之后的2n个时间离散,老鼠拆成每个时间的,第i个时间第j个老鼠为id[i][j],连接(s,i,p[i]),对于离散后时间(g[j 1]~g[j])在i奶酪的时间区间里的ij,连接(i,id,老鼠速度\ 时间段长),然后连(id,t,inf),阅读全文
posted @ 2019-05-09 21:30 lokiii 阅读(1) 评论(0) 编辑
摘要: 把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法乘法的lazytag,整体加整体乘的时候像线段树一样改smljlc,还有修改val,整体赋值的时候把阅读全文
posted @ 2019-05-09 15:56 lokiii 阅读(3) 评论(0) 编辑
摘要: 先把所有边可动设为r[i]又这些边不是l就是r(如果想一个方向改变能更优的话就尽量多的改变),每次跑dijsktra,对于可动边(x,y),如果dis1[x] include include include define ll long long using namespace std; const阅读全文
posted @ 2019-05-08 21:44 lokiii 阅读(1) 评论(0) 编辑
摘要: 这个告诉gcd的操作实际上就是告诉一个因数是否选,最坏情况是1,判断掉所有因数才能选 然后肯定是用猜不重复质数积比较划算,问题就变成若干个质数,分成数量尽量小每组乘积 include using namespace std; const int N=10005; int n,p[N],tot,ans阅读全文
posted @ 2019-05-08 19:53 lokiii 阅读(0) 评论(0) 编辑
摘要: 有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a b c d,ka=4,kb=2,kc=3,kd=4,按字典序就先选c然后b就不能合法了) 所以倒着来,建反图,然后按照n k[i]从大到小拓扑,因为是反图所以是阅读全文
posted @ 2019-05-08 19:31 lokiii 阅读(1) 评论(0) 编辑
摘要: 降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) cpp include include using namespace std; const int N=5005阅读全文
posted @ 2019-05-08 17:33 lokiii 阅读(1) 评论(0) 编辑
摘要: 把期望改成方案数最后除一下,设h[i]为最大值恰好是i的方案数,那么要求的就是Σh[i]\ i 首先包含其他区间的区间是没有意义的,用单调栈去掉 然后恰好不好求,就改成h[i]表示最大值最大是i的方案数,求Σ(h[i] h[i 1])\ i即可 然后考虑h怎么求,\\( h[i]=\sum_{j=1阅读全文
posted @ 2019-05-08 16:29 lokiii 阅读(1) 评论(0) 编辑
摘要: 妙啊,是一个逼近(?)的做法 把两个值最为平面上的点坐标,然后答案也是一个点。 首先求出可能是答案的点xy分别是按照c和t排序做最小生成树的答案,然后考虑比这两个点的答案小的答案,一定在xy连线靠近原电一侧(不过这部分并不全都能更新答案),然后最小的一定是距离xy连线最远的,设为点z,也就是三角形x阅读全文
posted @ 2019-05-08 10:30 lokiii 阅读(4) 评论(0) 编辑
摘要: 求出支配树输出到father的和即可 支配树见:https://blog.csdn.net/a710128/article/details/49913553 cpp include include include include using namespace std; const int N=30阅读全文
posted @ 2019-05-07 11:01 lokiii 阅读(5) 评论(0) 编辑
摘要: 首先平面图转对偶图,大概思路是每条边存正反,每个点存出边按极角排序,然后找每条边在它到达点的出边中极角排序的下一个,这样一定是这条边所属最小多边形的临边,然后根据next边找出所有多边形,用三角剖分计算面积 然后就比较妙了,把对偶图随便搞一个生成树出来,然后对于每个询问,如果一条边是树边,那么如果这阅读全文
posted @ 2019-05-05 21:06 lokiii 阅读(3) 评论(0) 编辑
摘要: 传送:https://vjudge.net/problem/TopCoder 14084 只是利用了笛卡尔树的性质,设f[i][j]为区间[i,j]的贡献,然后枚举中间最大的点k来转移,首先是两侧小区间贡献的,f[i][k 1]\ fac[j k]+f[k+1][j]\ fac[k i],大概是方案阅读全文
posted @ 2019-05-03 20:33 lokiii 阅读(18) 评论(0) 编辑
摘要: 枚举起点,然后设f[i][j]为上凸壳上一个点是i当前点是j的最大面积,g是下凸壳,然后合并的时候枚举结束点t合并上下凸壳即可 这样的好处是每次转移都是往凸多边形里加一个三角形(s,i,j),所以判断转移合法只要预处理出所有三角形是否合法即可,同时预处理出三角形面积,转移就是f[j][k]=max(阅读全文
posted @ 2019-05-03 16:59 lokiii 阅读(19) 评论(0) 编辑
摘要: 传送:https://dmoj.ca/problem/ioi17p3 参考:https://blog.csdn.net/qq_27327327/article/details/80711824 妙啊……首先题意就是走到一个包含充电点的环里就能赢 因为出度至少是1,所以如果所有点都能到充电点那么全部是阅读全文
posted @ 2019-05-03 12:09 lokiii 阅读(15) 评论(0) 编辑
摘要: 读题两小时系列…… 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合并了所有a[i].w include include include using namespace阅读全文
posted @ 2019-05-02 21:39 lokiii 阅读(13) 评论(0) 编辑
摘要: 首先考虑分割线能分割一条线当且仅当分割线一个端点在这条线的ab中间,另一端点在外面,也就是分割线对应的一条弧不能同时有这条线的两个端点 每条线的两端点都染同色,然后分段,一段里面颜色互不相同,分割线就是一段的开始连到结尾,割掉这段里的颜色的线,求最小的段数ans,答案就是(ans+1)/2 暴力是要阅读全文
posted @ 2019-05-02 20:09 lokiii 阅读(14) 评论(0) 编辑
摘要: 妙啊,很容易想到连(s,a1,an)(s,b1,bn)(a2,t,an)(b2,t,bn),这样,但是可能会发生a1流到b2或者b1流到a2这种不合法情况 考虑跑两次,第二次交换b1b2,如果两次都合法就是合法 证明是假设a1流到b2了x的流量,然后交换b1b2之后依然满足条件,那么一定可以有a1流阅读全文
posted @ 2019-05-02 18:54 lokiii 阅读(4) 评论(0) 编辑
摘要: 首先最直观的,列一排是罪犯一排不是罪犯,对于一个条件u说v(0是1否)f罪犯,如果u不是,那么vf罪犯;如果u是,枚举他说谎的一条wg罪犯,令w(g^1)罪犯连其他条的vf 但是这样有个电度数方,会炸 考虑前缀和优化建图,在原来两排下面再接上两排表示这个人说这条以及这条之前没有/有说过谎,pr[u]阅读全文
posted @ 2019-05-01 21:29 lokiii 阅读(6) 评论(0) 编辑
摘要: 洛谷上有个点死活卡不过去,不知道是哪里写丑了orz 参考:https://www.cnblogs.com/ditoly/p/BZOJ4200.html 从上往下dp,设f为不向左右走直接上去的值,g为先向左右走一步再上去,至于找每个方向上的点,分别按x,y,x+y,x y排序然后二分即可 然后建出左阅读全文
posted @ 2019-05-01 13:36 lokiii 阅读(7) 评论(0) 编辑
摘要: 对于原有边,流区间是(1,inf),按着原边连,然后再连(s,i,(0,inf)),(i,t,(0,inf))表示任意位置进出雪场 按着这个建出新图 然后最小流的方法是先跑可行流,设ans为(t,s,(0,inf))的流量,然后取消这条边,跑从原来的t s的最大流为ans2,答案就是ans ans2阅读全文
posted @ 2019-04-27 22:16 lokiii 阅读(6) 评论(0) 编辑
摘要: 据说正解是有上下界最小流,但是这种1e5的玩意问什么要跑网络流啊…… 贪心即可,注意一点是可以有多条路径经过一条边…… 以1为根,设d[u][0/1]为u到父亲的边是向下/向上,g记录这个点儿子中不能抵消且和它的d相同(同方向)的点个数,这里的抵消是一个0和一个1可以凑一条路径直接加进答案里,在df阅读全文
posted @ 2019-04-27 21:28 lokiii 阅读(5) 评论(0) 编辑
摘要: 每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf),v[i][j]),表示ij之间有剧情的话就至少走一次,每次走花费v[i][j]时间 然后套有上下界阅读全文
posted @ 2019-04-27 17:23 lokiii 阅读(5) 评论(0) 编辑
摘要: 连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0),表示这条边会流固定v[i]个人 连(s,ss,(m,m),0),表示限制m个人 然后跑有上下界有阅读全文
posted @ 2019-04-27 17:04 lokiii 阅读(4) 评论(0) 编辑
摘要: 最大值最小,所以考虑二分 |Σaij Σbij| include include include using namespace std; const int N=505; int n,m,ll,rr,a[N][N],sh[N],sl[N],h[N],cnt,le[N],d[N],s,t; stru阅读全文
posted @ 2019-04-27 10:44 lokiii 阅读(5) 评论(0) 编辑
摘要: 有正负收益,考虑最小割 因为有依赖关系,所以考虑最大权闭合子图 首先对每个d[i][j]建个点,正权连(s,id[i][j],d[i][j])并加到ans上,负权连(id[i][j],t, d[i][j]) 然后选了大区间一定会选小区间,连这样的依赖关系:(id[i][j],id[i+1][j],i阅读全文
posted @ 2019-04-26 21:09 lokiii 阅读(3) 评论(0) 编辑
摘要: 上来就跑3e5的最大流……脑子抽了 很容易看出,每个地方的海拔都是0或1因为再高了没有意义,又,上去下来再上去没有意义,所以最后一定是从s连着一片0,剩下连着t一片1,然后有贡献的就是01交接的那些边 跑个最小割就好了 然而跑不过,考虑建对偶图,也就是网格的空当成一个点,然后这些点之间互相连边的权值阅读全文
posted @ 2019-04-26 17:18 lokiii 阅读(5) 评论(0) 编辑
摘要: 一开始在https://www.cnblogs.com/lokiii/p/10770919.html基础上连(i,j,b[i][j])建了个极丑的图T掉了……把dinic换成isap勉强能卡过 首先因为有正负收益所以考虑最小割,先ans=Σb,然后考虑负收益 把割完后和s相邻的视为不选,反之视为选,阅读全文
posted @ 2019-04-26 10:30 lokiii 阅读(3) 评论(0) 编辑
摘要: 把转置矩阵看成逆矩阵吓傻了233 首先按照矩乘推一下式子: $$ D=\sum_{i=1}^n a[i] (\sum_{j=1}^n a[j] b[j][i]) c[i] $$ $$ D=(\sum_{i=1}^n \sum_{j=1}^n a[i] a[j] b[j][i]) (\sum_{i=1阅读全文
posted @ 2019-04-25 20:57 lokiii 阅读(8) 评论(0) 编辑