摘要:
题目链接 题目大意 有一个字符串和$m$个操作,每个操作都有一定的代价,判断是否能通过一系列操作使该字符串变成回文串。并求出最小代价。 分析 \(Floyed\) 给出这些操作,会发现有些操作是完全没有用的(因为有更好的组合可以达到此目的),所以我们可以先跑一遍$Floyed$,求出这26个字母与空 阅读全文
摘要:
悬线法 用途 解决给定矩阵中满足条件的最大子矩阵 做法 用一条线(横竖貌似都行)左右移动直到不满足约束条件或者到达边界 定义 $left[i][j]$:代表从$(i,j)$能到达的 最左位置 $right[i][j]$:代表从$(i,j)$能到达的 最右位置 $up[i][j]$:代表从$(i,j) 阅读全文
摘要:
割点的概念 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点就叫做割点(cut vertex / articulation point)。 例如,在下图中,0、3是割点,因为将0和3中任意一个去掉之后,图就不再连通。如果去掉0,则图被分成1、2和3、4两个连通分量; 阅读全文
摘要:
【分析】 暴力搜顺子,贪心出散牌 为什么顺子要暴力? 玩过斗地主的都知道,并不是出越长的顺子越好,如果你有一组手牌, ,你一下把最长的出了去,你会单两张牌,不如出两个顺子,所以顺子要暴力。 贪心打散牌 这是核心所在,也是不超时的原因。 可以先统计一下不同牌个数的组数,然后再出牌, 那如何打出最优解? 阅读全文
摘要:
【思路】 题目给出一棵树。第$i$步拆的一定是第$i$层与第$i+1$层之间的连边,否则不是最优(自行证明即可),所以可以暴力枚举每一次拆哪一个节点与上一个节点的连边。 把所有节点所在的层数存下来,一号点在第$1$层,枚举每一层的每个节点(由于$1$号节点已经被感染,从第二层开始搜索就可以了) 大概 阅读全文
摘要:
概念 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路 阅读全文
摘要:
题目描述 物流公司要把一批货物从码头$A$运到码头$B$。由于货物量比较大,需要$n$天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够 阅读全文
摘要:
【题意】 在一个赛车比赛中,赛道有$n(n\text{开启时间}$,说明此道路 关闭 ,反之此道路 开启 (自己想一想,应该能相通的) 【代码】 细节上面已经说的很清楚了 ~~(也方便进行复制)~~,就不加注释了 cpp include using namespace std; const int 阅读全文
摘要:
本题看似很难,实际上思路非常简单——如果你想通了。 首先有一个问题:图中有几个点?大部分的人会回答$n$个点。错了,有$n+1$个。 多出来的那个点在哪?关键在于你要理解每一个决策的意义。实际上,多出来的那个点是地下的天然矿泉水。当我们打井时,我们实际上是在往地下连边。理解了这一点,代码就没有任何难 阅读全文
摘要:
【题意】 补丁在修正$BUG$时,有时也会引入新的$BUG$,假定有$n(n<=20)$个潜在$BUG$,和$m(m<=100)$个补丁,每个补丁用两个长度为$n$的字符串表示,其中字符串的每个位置表示一个$BUG$,第一个串表示打补丁之前的状态 (“-”表示该$BUG$必须不存在,“+”表示该补丁 阅读全文