摘要: 这题这场比赛一堆人秒切。。果然还是我太菜了吗 题意:二分图,右边$m$个点每个点$i$向左边有且仅有两条连边,边权都是$a_i$。求最大匹配。 一个朴素思想,二分图匹配,用贪心带匈牙利搞一搞,但是复杂度$O(mn)$。````` 注意字眼“只能选一次”。对于同一个点连出的两条边只能择一。也就是说,左 阅读全文
posted @ 2019-10-16 09:27 Ametsuji_akiya 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 这题和某道最短路题神似。对于任意点对,将他们连边,不如将他们分别沿$x,y$轴方向上点按顺序连起来,这样不仅可能多连通一些点,也花费更低,所以按照最短路那题的连边方式跑一个kruskal就行了。 1 #include<iostream> 2 #include<cstdio> 3 #include<c 阅读全文
posted @ 2019-10-15 20:19 Ametsuji_akiya 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 关于Kruskal重构树可以翻阅本人的最小生成树笔记。 这题明显裸的Kruskal重构树。 然后这题限制$\le p$的边不能走,实际上就是要满足走最小边权最大的瓶颈路,于是跑最大生成树,构建Kruskal重构树。 通过倍增跳到最浅祖先位置,就get到了一个点可以走到的点集(子树所有叶子)。这些点里 阅读全文
posted @ 2019-10-15 19:36 Ametsuji_akiya 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 方法一:套路性的,二分距离,然后把距离点对距离小于答案的边都联通起来,然后看集合数量超过k说明答案小,增大,否则减小。 方法二:贪心,类kruskal。n个点,k个连通块,则需要有效连接(同一个块内的点相互连接不算)n-k次。那么用类似kruskal的证明过程发现最小的边一定要联通使得集合与集合间距 阅读全文
posted @ 2019-10-15 14:44 Ametsuji_akiya 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 标题解法是吓人的。 图上修改询问,不好用数据结构操作。尝试转化为树来维护。发现(不要问怎么发现的)最小生成树在这里比较行得通,因为最近异色点对一定是相邻的(很好想),所以只要看最短的一条两端连着异色点的边,而分析一下kruskal的过程,发现满足这种要求的最小边一定会被加进去(因为相邻异色点总要联通 阅读全文
posted @ 2019-10-15 12:24 Ametsuji_akiya 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 前注:关于这题,本人的解法暂时没有成功通过此题,原因是被卡常了。可能需要等待某种机缘来请人调试。 类似uoj的一道题(新年的繁荣),不过是一个有些简单的版本。 因为是完全图,有没有办法明显优化建边,所以考虑用这个Boruvka算法。MST学习笔记里应当记下来了,可以自行前往。然后在这里,就发现使用B 阅读全文
posted @ 2019-10-14 21:51 Ametsuji_akiya 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题意:$n$个点,$q$次建边,每次建边选定$x,y$,权值$c$,然后接着$(y,x+1,c+1),(x+1,y+1,c+2),(y+1,x+2,c+3),(x+2,y+2,c+4)\dots$(画图理解),然后求最小生成树。 一开始想的是堆维护最小。。发现不行````` 这题是等效转化。回顾kr 阅读全文
posted @ 2019-10-14 17:56 Ametsuji_akiya 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 法1——图论: 其实图论并不是我一开始就想出来的。。。纯粹是先受了网络流做法的启发改进的。对于每个士兵都要守护一行或者一列,将守护行看做标号$i$的点,连向所在的列$y+n$(注意平移),守护列则反过来。这样,这张图上每个点都有一个出边,这就是一片基环树森林。但是要注意的是,同一条边的两个方向不能同 阅读全文
posted @ 2019-10-12 19:50 Ametsuji_akiya 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 简化题意:一序列,查询区间和$s_{i\sim j}$已知花费$c_{i,j}$,求知悉所有数最小花费。 神仙思路题 查询一个区间$i\sim j$,记前缀和$sum$,则如果在某时候知道了$sum_{i-1}$或者$sum_j$中的任意一个,另一个也可以知道,那么可以选择花费$c_{i,j}$连无 阅读全文
posted @ 2019-10-12 15:55 Ametsuji_akiya 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 显然分析可知这个图最后连起来是一个森林,每棵树有一个根再算一个代价。那么这些跟需要连向某一点一个建立水库的代价,且根可以有多个但不能没有,则考虑用超级源点0向所有点连虚边,Prim跑MST即可保证有至少一个根。 1 #include<iostream> 2 #include<cstdio> 3 #i 阅读全文
posted @ 2019-10-12 10:56 Ametsuji_akiya 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 这题是一个类似于区间选点,但是有一些不等式有三个未知量参与的情况。 依题意,套路性的,将小时数向右平移1个单位后,设$f_i$为前$i$小时工作的人数最少是多少,$f_{24}$即为所求。设$c_i$为第$i$小时可选人数,$lim_i$为要求人数下限。 $0\le f_i-f_{i-1}\le c 阅读全文
posted @ 2019-10-10 11:21 Ametsuji_akiya 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 以往对于差分约束理解不是太深,导致这题屡次被坑,在此记录一下细节的理解。 差分约束实际上就是利用了spfa的一个特性:只要有$dis_y>dis_x+w_{x,y}$就松弛,直到所有边关系都满足$dis_y\le dis_x+w_{x,y}$,而这一不等式恰好可以套在差分约束问题里。差分约束要求满足 阅读全文
posted @ 2019-10-08 18:39 Ametsuji_akiya 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 题意:求$K$的倍数中数位和的最小值。 一开始有一种思路:由于产生答案的数字可能非常大,不便枚举,考虑转化为构造一个数字可以有$x\mod k=0$。然后二分答案数位和,数位DP检验是否存在,但是由于数位DP还是局限于有限大小的数字,所以并不可行。````` 套路见少了。实际上,这种构造数字满足某些 阅读全文
posted @ 2019-10-08 15:21 Ametsuji_akiya 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 你们都说这题简单可是我想了好久,可能还是太菜,泪拉了下来 由于这题网上全部是一句话题解,我并不能理解个中原因,向hkk神仙请教被以“很显然的做法”驳回。。神仙做题全都是显然吗? 最后自己yy出了一种新做法应该叫新的科学严谨的理解方法,不知道是不是一种正确思路 首先尝试优化建边,对于一个点对,他们连一 阅读全文
posted @ 2019-09-29 20:13 Ametsuji_akiya 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 显然分层图裸题,做这题纯粹是为了填坑,不解释。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #defin 阅读全文
posted @ 2019-09-29 11:56 Ametsuji_akiya 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 声明:关于这题的$O(mn)$尚且未深入理解,虽然之前有跟这位神仙聊过做法但并没太懂。。 $O(mn\log m)$同余最短路做法: 首先不妨抽出最小的$a_i=m$,那么剩余的$a$如果可以表示出$x$,那么$x+km$的所有数都可以表出。所以对于$m$的同一个同余类$i\in[0,m)$,我们希 阅读全文
posted @ 2019-09-29 09:56 Ametsuji_akiya 阅读(325) 评论(0) 推荐(1) 编辑
摘要: $n$非常的小,结合题目计算式可以想到$O(n^3)$暴枚$s,t,v$,看$v$在不在$s\to t$最短路上($dis_{s,v}+dis_{v,t}=dis_{s,v}$是$v$在两点最短路上的充要条件——很好证),在则统计$\frac{cnt_{s,v}\times cnt_{v,t}}{c 阅读全文
posted @ 2019-09-28 20:26 Ametsuji_akiya 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 首先$O(n^2\log n)$暴力很好想,直接每个点出发跑一遍最短路,排$dis$统计一下即可。考虑怎么优化。发现$rank$很小,考虑从$rank$入手。换一种统计方法,看每个点$x$如果作为别的点的兴趣点,可能产生多少贡献。那么别的点$i$到他的最短距离设为$dis_i$,$i$到所有$ran 阅读全文
posted @ 2019-09-28 20:26 Ametsuji_akiya 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 一个最小环裸题。最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了。 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编号并枚举连边,这样另外枚举的两个点的最短路肯定不会经过和$k$连的边。 坑点: 平常inf都开0x3 阅读全文
posted @ 2019-09-28 20:26 Ametsuji_akiya 阅读(170) 评论(0) 推荐(0) 编辑
摘要: orz极速暴切此题的hkk。 如果没有保护限制,直接跑最短路,现在到达某些点要先经过保护点,那么在跑dijkstra时候每一轮可以先减少这些点保护数量,如果有恰好点没有保护了,说明这个点就可以走了,且这个点$dis$应当是走完所有保护点时间和走到他本身时间的$max$,把他压入堆。这样之后,如果又有 阅读全文
posted @ 2019-09-28 20:26 Ametsuji_akiya 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 有生以来做过的bzoj比A+B还简单的最水的题。(确信) 不解释。 UPD:据说这题正解应当是矩阵树定理?但是这个不是用来最小生成树计数的么?有生之年会补的。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include 阅读全文
posted @ 2019-09-28 20:26 Ametsuji_akiya 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 这题以前就被灌输了“打表找规律”的思想,所以一直没有好好想这道题,过了一年还不太会qwq。虽然好像确实很简单,但是还是带着感觉会被嘲讽的心态写这个题解。。。而且还有一个log做法不会。。。 法1:(一开始没看懂,后由hkk神仙教导ORZ) 因为$ax+by=k$如果无视$\{x,y\}$非负整数解的 阅读全文
posted @ 2019-09-27 20:55 Ametsuji_akiya 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 感觉和以前做过的一个推箱子很像,都是可以用bfs解决的,而且都是手玩出结论。 因为起始棋子肯定是要和空格交换的,所以第一件事是先把空格移到棋子旁边。然后讨论怎么设计搜索状态。由于和推箱子实在太像了,所以直接借鉴,发现空格总是要贴着棋子走的要不然就是换个贴的方向继续走(这里的走就是指交换)。于是绑定两 阅读全文
posted @ 2019-09-26 22:12 Ametsuji_akiya 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 显然这里的$n^2$级别的边数不能全建出来,于是盯住xor这个关键点去 瞎猜 探究有没有什么特殊性质可以使得一些边没有必要建出来。 发现一个点经过一次xor $x$,花费$x$这么多代价(先不看$C$),到达另一个点$u\text{xor}x$。 结合异或性质,发现其实这个过程完全可以通过把$x$拆 阅读全文
posted @ 2019-09-26 22:12 Ametsuji_akiya 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 初中组。。唉 题意有点误解,当前在x点走一步,gps产生代价条件是沿非x到n的最短路走。 直接倒着跑两遍$i\sim n$的两种最短路,然后枚举每条边走的时候是否可以在两种最短路上,不是就产生1个代价,然后以这个代价重新建图正着跑一遍最短路即可。 1 #include<iostream> 2 #in 阅读全文
posted @ 2019-09-26 22:12 Ametsuji_akiya 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 跑一遍mst。对于非mst上的边,显然删掉不影响。 如果删边在树上,相当于这时剩下两个连通块。可以证明要重新构成mst只需要再加一条连接两个连通块的最小边,不会证,yy一下,因为原来连通块连的边权和已经最小化了,就不要动,如果换用两条以上的边,肯定不会更优。 所以问题就是断掉树边,找最小联通边。可以 阅读全文
posted @ 2019-09-26 10:07 Ametsuji_akiya 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 看到题意最小化最长路径,显然二分答案,枚举链长度不超过$\text{mid}$,然后尝试检验。````` 检验是否存在这样一个边置为0后,全部链长$\le\text{mid}$,其最终目标就是、要让所有$>\text{mid}$的链长通过找出一个为0的公共边减掉而全部变为$\le\text{mid} 阅读全文
posted @ 2019-09-26 10:07 Ametsuji_akiya 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 操作0,显然直接线段树解决。 操作1,瓶颈在于重叠的链只算一次。在线段树上来看,如果一个区间被覆盖了,那么只算这个区间,子树里面也就不管了。 考虑对节点打标记来表示是否覆盖。但是,如果统一打完之后,并不方便计算打上标记的点的和。明确目标,现在希望能覆盖很多小区间的一个大区间被打上标记之后用他来更新答 阅读全文
posted @ 2019-09-26 10:07 Ametsuji_akiya 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 一个几乎用不到的在线维护平面内线段关系的$O(nlog^2n)$结构。 阅读全文
posted @ 2019-09-23 20:57 Ametsuji_akiya 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 复习几乎考不到的树剖。维护min以及min个数,打set和add标记即可,注意set优先级优于add。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath 阅读全文
posted @ 2019-09-23 18:11 Ametsuji_akiya 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 思维题,思路比较神仙。 个人思路过程:个人只想到了只要中间棋子开始向外跳了,以后就不应该向内跳了,这样很蠢。所以应该要么先向内跳一会,要么直接开始中间的向外跳。不知道怎么处理,就卡住了。 20pts:暴力BFS。 事实上,这题的解题关键就在于一次只允许跳过1颗棋子,这表明向内跳只能是距离中间棋子近的 阅读全文
posted @ 2019-09-23 11:00 Ametsuji_akiya 阅读(215) 评论(0) 推荐(0) 编辑
摘要: Task1 这个是USACO 2019 JAN Gold的原题,可能因为过于水,所以我即使八点多才开始做也提前ak。。。来写一篇题解。。 A. Cow Poetry 显然押同一韵的行只需要最后一个词属于一个韵部,前面长度$K-s_i$随便排,DP一下长度$i$的有多少种,类似于背包转移,只是把物品放 阅读全文
posted @ 2019-09-22 10:56 Ametsuji_akiya 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 首先隔断一条树边,不计附加边这个树肯定是断成两块了,然后就看附加边有没有连着的两个点在不同的块内。 方法1:BIT乱搞(个人思路) 假设考虑到$x$节点隔断和他父亲的边,要看$x$子树内有没有点连着附加边到子树外的。如果没有,则随便割,有1个,有唯一割法,否则没有。这个可以用dfs序处理好序列后,直 阅读全文
posted @ 2019-09-21 17:40 Ametsuji_akiya 阅读(185) 评论(0) 推荐(0) 编辑
摘要: poj我怎么一天到晚做的全是普及组CSP-J类的题目啊 发现回文中心肯定是在串内部的。而一个串两端如果不一样,肯定是要动的。也就是说$S_{i...j}$只要动一端,看剩下来部分minvalue。于是这是一个基于区间的字符串DP。 设$f_{i,j}$表示区间为回文串的最小代价,如果一个串两头不同, 阅读全文
posted @ 2019-09-20 20:52 Ametsuji_akiya 阅读(168) 评论(0) 推荐(0) 编辑
摘要: $给定 n 个模式串,和一个长度为 m 的原串 s,求至少修改原串中的几个字符可以使得原串中不包含任一个模式串。模式串总长度 ≤ 1000,m ≤ 1000。$ 先建出模式串的AC自动机,然后考虑怎么求最优解。考虑AC自动机上DP,设$f_{i,j}$走了$i$步之后在$j$节点时候的最少修改次数。 阅读全文
posted @ 2019-09-20 18:01 Ametsuji_akiya 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 我学到现在才是初三学弟的水平。。哭 这里相当于求长度为$m$的,字符集$\{A...Z\}$的且不包含任一模式串的文本串个数。这是一个典型的AC自动机匹配计数问题。 设$f_{i,j}$表示在AC自动机上面走了$i$步在$j$点的方案数。 注意由于不能包含任一模式串,也就是说任意时刻都不能项后缀含有 阅读全文
posted @ 2019-09-20 16:50 Ametsuji_akiya 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 给定字符串 A,B,要求从 A 中取出互不重叠的 k 个非空子串,按照出现顺序拼起来后等于 B。求方案数。n ≤ 1000,m ≤ 200。 主要是状态的转移。先设计出$f_{i,j,k}$表长度$B_j$分了$k$段很好想,但是发现并不容易转移。 主要瓶颈在于当枚举了状态$f_{i,j,k}$ 的 阅读全文
posted @ 2019-09-20 12:11 Ametsuji_akiya 阅读(186) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-09-19 09:09 Ametsuji_akiya 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 改变了我对铺砖问题的认识。首先根据之前的理解,要表示这一行当前的铺设情况,注意到由于竖着摆砖是3层的,所以要保存两行的状态,也就是对于$a[i][j]和a[i-1][j]$的铺设状态。 1.如何设计状态 无非4种情况。 $s_{i,j}=s_{i-1,j}=0$,两格都没铺。可用$0$表示 $s_{ 阅读全文
posted @ 2019-09-18 16:53 Ametsuji_akiya 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 附带其他做法参考:随机化(模拟退火、爬山等等等)配合搜索剪枝食用。 首先题意相当于在图上找一颗生成树并确定根,使得每个点与父亲的连边的权乘以各自深度的总和最小。即$\sum\limits_{i}depth_i\times value_{i→fa}$。 看数据范围想状压,固定好一个点为根,然后每个点选 阅读全文
posted @ 2019-09-18 08:19 Ametsuji_akiya 阅读(177) 评论(0) 推荐(0) 编辑