[NOI2010] 航空管制

题意
对于一个 1   n 1~n 1 n的排列C
每个 i i i,都满足 C [ i ] < = A [ i ] C[i]<=A[i] C[i]<=A[i]
且要满足 m m m个限制 i , j i,j i,j
C [ i ] < C [ j ] C[i]<C[j] C[i]<C[j]
第一问:输出一组合法的 C C C
第二问:对于每个 i i i,合法的 C i Ci Ci的最小值
思路
根据限制建立正图和返图
真正的 A [ i ] A[i] A[i]其实是反中儿子的真正的 A [ i ] A[i] A[i]的最小值 − 1 -1 1
在反图跑一遍 s p f a spfa spfa求出真正的 A A A
明显,正图中一个点的 A A A一定比祖先的大,祖先关系也明确了
考虑第一问:
根据A从小到大输出,由于肯定有解,这样贪心肯定满足A限制,同时祖先也肯定先比儿子取,满足后一种限制。
考虑第二问:
预处理,对于每个 i i i,放进 A [ i ] A[i] A[i] v e c t o r vector vector
对于每个 i i i,考虑倒着选,强行不能选 i i i及其祖先
然后倒着枚举,每次只要放已经符合条件的进去就好
假如剩下未填的数大于可填的数,退出
反思
一开始没能抓住处理完 A A A后已明确祖先关系这一点
导致中间卡了很久

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值