csp-s模拟98
T1:
大模拟……
考试时就想到了,打了两个多小时没调出来……
具体策略很平时玩这个东西的策略是一样的
先将右下\((n-2,n-2)\)的格子填好,然后将最左的两列和最上的两行填好,最后旋转剩下的\(2*2\)的格子来判断无解
(模就完了)
T2:
有点像某道奶牛题
思路都是一样的,发现如果正着添加限制/贡献很难搞,那就倒着加就好了:
对那道题来说就是将奶牛塞到下面,对这道题来说就是新打开的灯看作是更早时间打开的
然后简单dp就行了
T3:
神仙题
第一次见这么难的最短路题……
考虑若不存在确定没有学会毒瘤算法的同学,那么每两个同学一定越早吃越好
而如果有怎么办?
考虑处理一个\(lim_i\)表示i同学最早学会算法的时间
那么边界就是对于确定不会算法的同学x满足\(lim_x=\infty\)
考虑这个限制是可以传递的,即:若y到x有边i,且\(lim_y>r\)则\(lim_x=max\{ l_i+1 \}\)
跑个最长路就能把lim处理出来
之后计算\(ans_i\)表示i同学学会算法的时间,还是贪心的让学会的时间最早,但不能早过\(lim_i\)
转移为:若y到x有边i,则\(ans_x=min\{ max(ans_y,l_i,lim_x) \}\)
最后若确定不能学会算法的同学和1同学吃过饭,或确定学会算法的同学的ans没有被更新,则无解
若有解,那么讨论一下每条边两端点的情况:
若有一端没有学会算法,那就在l时刻吃饭
否则当\(max(ans_x,ans_y)>r\)时随便输出,当\(max(ans_x,ans_y) \leq r\)时,输出\(max(ans_x,ans_y,l)\)