摘要: woc累死了写了两个半小时。。。就是BFS?我太菜了。。。 刚开始以为让人预先跑一遍BFS,然后一会儿取两节加起来就好了,结果发现求出来的最短路(就是这个意思)会因箱子的移动而变化。。。。我死了QWQ 康康书上正解:双重BFS?!!让人推箱子的时候再跑一遍BFS?!!时间不就爆炸了?!!啊n,m只有 阅读全文
posted @ 2019-04-26 15:21 LuitaryiJack 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 多测不清空,爆零两行泪。。。。我死了QWQ 每个节点3个状态:横坐标,纵坐标,和方向 说一下方向:0:立着,1:竖着躺着,上半部分在(x,y),2:横着躺着,左半部分在(x,y) 然后就有了常量数组: 第一维是状态中的方向,第二维是要扩展的方向(0,1,2,3) 然后就搜他。。。。记得queue要清 阅读全文
posted @ 2019-04-26 11:28 LuitaryiJack 阅读(318) 评论(0) 推荐(1) 编辑
摘要: 双向搜索:把前一半的可行状态搜出来,然后sort+unique,之后搜后一半时,结束时二分一下前一半的答案,拼出一个与W尽量接近的ans来更新 ps:距LYD说前一半取n/2+2时跑的最快。。。不知,,, 2019.04.26 阅读全文
posted @ 2019-04-26 09:43 LuitaryiJack 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 不知蓝书的标程在说什么,,,,于是自己想了一下。。。发现自己的代码短的一批。。。 限制搜索深度+枚举时从大往小枚举,以更接近n+bool判重,避免重复搜索 2019.04.26 阅读全文
posted @ 2019-04-26 09:00 LuitaryiJack 阅读(89) 评论(0) 推荐(0) 编辑
摘要: emm。。。挺秀的。。。挺神的? 每行,每列,每宫用一个二进制数表示选或没选的状态,刚开始设没选为1,然后更改状态的时候异或一下就好了; 这样可以通过lowbit取出每一个没有选过的数;(妙啊? 关于剪枝:每次选状态数最小的位置(就是能选择的数少的位置)去向下搜索(需要预处理出每个数代表的状态能选择 阅读全文
posted @ 2019-04-26 00:08 LuitaryiJack 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 好啊。。。太棒了。。。 dfs(拼到第几根木棍,这根木棍剩余长度,上一根木棍的位置) len是木棍的长度,cnt是木棍的个数 震撼人心的剪枝: 1.枚举长度从最大的木棍开始,直到sum/2,因为之后只能是一整个了。。 2.木棍从大往小试,减少状态数; 3.等长木棍搜索后,就跳过另一根等长的,因为状态 阅读全文
posted @ 2019-04-25 21:40 LuitaryiJack 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 当时一直在想前缀和。。。多亏张队提醒。。。 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉;再从n到1背一次,同样记住每种状态; 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间去掉了一个应去掉的商品。 2019.04.25 阅读全文
posted @ 2019-04-25 00:15 LuitaryiJack 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 最短路树。。。开眼界了。。。之前想也没想过。。。。 先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边。。。然后深搜时更新新答案就是 2019.04.25 阅读全文
posted @ 2019-04-25 00:08 LuitaryiJack 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 先跑一遍n为起点最短路,再新开一个点,向有干草垛的点连一根边权为d[u]-w的有向边(很重要。。我当时连的无向边,然后我死了。),相当于用价值抵消一部分边权, 然后以这个新的点为起点跑最短路就好了。。。 2019.04.24 阅读全文
posted @ 2019-04-24 23:53 LuitaryiJack 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 颓了、、、重边导致我乖乖用邻接矩阵。。。。 好吧就是个最短路计数。。。。如果更新时d[v]==d[u]+w[i],就可以接起来,把两个加在一起。。 如果d[v]>d[u]+w[i],那么c[v]直接赋值为c[u],相当于这个最短路是由u转移过来的、 2019.04.24 阅读全文
posted @ 2019-04-24 23:42 LuitaryiJack 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 细节题?、、、调了半天。。。。 可以发现,每一次从缓存中删除的主存一定是下次访问最晚的,可以用优先队列来处理。。。还有要离散化。。。还有链表末尾要多建一些点、、、否则会死的很惨、、、 2019.04.24 阅读全文
posted @ 2019-04-24 23:28 LuitaryiJack 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 还是拿set搞。。。 用set记录每个被摧毁的位置,Q的时候二分一下,在和上一个摧毁的位置减一下,即可求出能到的房子数 2019.04.24 阅读全文
posted @ 2019-04-24 11:35 LuitaryiJack 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 这题。。。一眼set。。。但是打了一会儿。。 记录一下每个价格对应的美丽度,顺便充当vis数组,如果美丽度不为0,说明set里已经有了。。。 删除好说,删*s.begin()和*--s.end()就好,但是记得删之前判一下size,否则--s.end()会可能RE 阅读全文
posted @ 2019-04-24 11:29 LuitaryiJack 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 好久不做这种题了。。。 存一下每个点的位置和时间,由于达到某个位置跟之前去哪里AK的无关,所以在时间超限后,可以用大根堆弹掉之前消耗时间最大的,来更新答案,相当于去掉之前花费最大的,直到时间不在超限。 2019.04.24 阅读全文
posted @ 2019-04-24 11:24 LuitaryiJack 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 真是道好题。。。感到灵魂的升华。。。 按dfs序建树状数组,拿前缀和去求解散块; 按点的标号分块,分成一个个区间,记录区间子树和 的 总和。。。 具体地,需要记录每个点u修改后,对每一个块i的贡献,记为t[u][i] 计算思路:dfs时,每到一个新的点,就让++c[其所在块],为了记录每个块中的点出 阅读全文
posted @ 2019-04-23 18:34 LuitaryiJack 阅读(148) 评论(0) 推荐(0) 编辑
摘要: mdzz....我的-Wall怕不是被吃了。。。快读里面==写成了=。。。。艹。。。调了一中午、、、QWQ我的时间啊。。。 分块:块内排序加tag(就是偏移量),来二分比所求大的位置;散块暴力修改。。。 f我再也不能写错快读了。。。2019.04.23 阅读全文
posted @ 2019-04-23 14:17 LuitaryiJack 阅读(121) 评论(0) 推荐(0) 编辑
摘要: (好吧好吧这是LCT裸题)。。。from RYC's 课件 然鹅分块大法好。。。 分成 F(n) 块(至于这个函数怎么写就是你的事了) 块内计算出所有位置在块内能跳的次数cnt,和指向的下一个位置nxt,直接跳到块的末尾,然后进到下一个块;如果跳出块,重新计算cnt和nxt。。。 (记住编号是0-n 阅读全文
posted @ 2019-04-23 11:51 LuitaryiJack 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 我猜会有智障说直接链剖+线段树…(希望没有) From RYC's 课件 然鹅我并不反对树剖。。。我是智障。。。QAQ 好吧还是树上差分:设 a[i]=u.a[i+1]=v ++w[u],++w[v],--w[lca(u,v)],--w[fa of lca(u,v)] 最后dfs一边统计答案 201 阅读全文
posted @ 2019-04-22 21:26 LuitaryiJack 阅读(115) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-04-22 20:21 LuitaryiJack 阅读(9) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-04-22 19:22 LuitaryiJack 阅读(12) 评论(0) 推荐(0) 编辑