【题解】CF739D Recover a functional graph(构造+二分图匹配)

【题解】CF739D Recover a functional graph(构造+二分图匹配)

题目大意

一个图被称为F图当且仅当每个点出度为1。可以发现这个图是一个内向基环森林,给出所有点到它能到达的环(只会有一个)的距离dis和那个环的长度len,然而有些点的信息模糊了,用?代替,可以是任何数。现在你要输出一个合法的构造方案。

可以提炼出一个图是F图的条件:

  • 对应环的距离数组是自然数数列
  • \(len=k\)的点的个数是\(tk,t\in N^+\)

由于第二个条件只能用问号补,没有决策需要做,直接补上(也要用二分图匹配实现)。考虑如何满足第一个条件,可以每种长度的环选一个出来作为代表环其他可以丢掉,这样就没有选环的决策了,这样仍然可以构造合法解出来(若有多个dis=p,都连向dis=p-1的点就好了)。满足第一个条件关键在于dis最大的那个点,我们不去将\(dis=?\)的点变得比已有对应\(dis\)更大,因为这样肯定不优。

然而还有一个问题,\(len=?,dis=...\)的最大的dis,它去哪个地方匹配我们是不确定的,这个枚举一下就好了(只需要枚举一个,多个最大dis的当做多余的连到dis-1就行了)。

现在我们只有\((len=?,dis=...)\)\((len=...,dis=?)\)的需要搞了,这部分可以二分图匹配做。

现在问题是自然数数列可能中间有些地方根本就没得,但我们只需要一个点就行了,就建立一排点进行匹配,匹配完成后看这一排点是否满流就行了。

你可能感兴趣的:(【题解】CF739D Recover a functional graph(构造+二分图匹配))