G. Allowed Letters
题目描述:有一个字符串,由'abcdef'组成,现在对这个字符串进行重排,并满足每个位置能选择的字符,输出重排后字典序最小的字符串,或无解
solution
逐位安排字符,枚举选择哪一个字符后判断剩下的字符是否能满足后面的每个位置的需求,如果可以就选择这个字符。
问题在于如何判断剩下的字符是否能满足条件。这里可以利用一个定理:Hall's marriage theorem.
这个定理给出了一个二分图完美匹配的必要条件:假设两个点集(U, V),若对于(forall S subset U), (S)连到(V)的点集为(S'(subset V)), 满足(|S| leq |S'|),那么(U)能全部匹配。
利用这个定理还能求二分图的最大匹配(=|U|-max(|S|-|S'|))
回到这道题,可以(2^6)枚举选择的字符集,预处理出只用该字符集(或子集)的位置有多少个,再用定理判断是否存在完美匹配即可。
时间复杂度:(O(n*2^6*6^2))