Codeforces 1697F. Too Many Constraints (2800)

给定 n,m,k,任务是构造出一个长度为 n,值域为 [1,k] 的单调不减数组 a,满足给定的 m 条限制(分为 3 种):
Type 1: aix
Type 2: ai+ajx
Type 3: ai+ajx
1n,m2104,1k10,2x2k


简单 two-sat 题。

数据范围中 k10,值域很小,考虑拆点。
考虑将数组中的每个数拆成 1,2,,k,>1,>2,,>k

(i,j,0) 为表示满足 aij 的点,(i,j,1) 为表示满足 ai>j 的点。

  • 根据定义,若 aij,则 aij+1,所以增加限制 (i,j,0)&(i,j+1,0)
  • 根据定义,若 ai>j,则 ai>j1,所以增加限制 (i,j,1)&(i,j1,1)
  • 根据单调不减的条件,若 ai>j,则 ai+1ai>j,所以增加限制 (i,j,1)&(i+1,j,1)
  • 对于第一种限制,ai 要么 x1,要么 >x,所以增加限制 (i,x1,0)&(i,x,1)
  • 对于第二种限制,若 ait,则 ajxt,所以枚举 t,然后增加限制 (i,t,0)&(j,xt,0)
  • 对于第三种限制,若 ai>t,则 aj>xt2,所以枚举 t,然后增加限制 (i,t,1)&(j,xt2,1)

最后跑一遍 two-sat 求出答案。

总时间复杂度 O(nk)

双倍经验加强版题面 Topcoder SRM Div1, LV3 NeverAskHerAge

posted @   Samsara-soul  阅读(131)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示