ABC277 E~Ex

E:

简单最短路,加一维表示当前是否翻转所有边的状态即可。

Code

F:

先考虑简化版本,如果 {A}没有 0,如何判定。

重新表述一下条件,令 mni,mxi 分别表示第 i 行中的最小值和最大值,则有

  • mn1mx1mn2mx2mnnmxn
  • i[1,n],j[1,m1],Ai,jAi,j+1

可以发现,交换行不会影响条件 2,交换列不会影响条件 1

于是原问题变成了两个独立的问题。

对于问题 1,将每行按照 mn 从小到大,mn 相同时 mx 从小到大排序,然后检查一遍是否合法即可。

对于问题 2,考虑建图,对于两行 j,j,如果存在一个 i 满足 Ai,j<Ai,j,就建一条边 jj,代表最终排完后 j 列必须在 j 列左边。

显然,如果图是一张 DAG,那有解,否则无解。

但是边的数量太多了,显式建图的话还得继续优化。

其实没必要那么麻烦,代码中并没有显式建图,而是直接 sort,之后再检查是否合法。

直接 sort 应该是假的,Hack 数据:

1 0 3
5 0 3
0 0 0

应该输出 No,反正我的代码是输出 Yes 的,不知道有没有其他直接 sort 正确性是对的。

考虑建虚点,假设当前某一行形如:

  • 1,2,3,4,5,6
  • 1,2,1,3,3,1

则建三个虚点,第一个虚点连向 1,3,61,3,6 连向第二个虚点,第二个虚点连向 22 连向第三个虚点,第三个虚点连向 4,5

发现点,边的数量都降到了 O(nm) 级别,直接拓扑一遍即可。

简化版本考虑完了,如果有 0 呢?

其实也一样,原题中是填完 0 再交换,不难发现等价于交换完再填 0

而如果交换完后,矩阵中忽略 0 后已经满足非严格递增,则一定可以构造出答案。

例如目前 {A}={0,0,2,0,3,4,0,0,4,0,5,0},则可以将其填为 {1,1,2,2,3,4,4,4,4,4,5,5}

于是可以解决有 0 的情况,把 0 忽略掉,用没 0 的情况来处理即可。

时间复杂度 O(nmlognm)

Code

G:

这题搬到了图上。

依旧考虑设 fi,j,k,k[0,1,2] 表示走了 i 步,在点 j,Level 的 k 次方的期望值。

转移依旧类似,核心思想依旧是利用期望的线性性,即

E[x+1]=E[x]+E[1]

E[(x+1)2]=E[x2]+2E[x]+E[1]

按照 i 从小到大依次更新即可。

时间复杂度 O((n+m)k)

具体细节看代码。

Code

Ex:

这题的弱化版,稍微改几个地方就好了。

Code

posted @   Kobe303  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示