专栏文章

UVA1439 独占访问2 Exclusive Access 2 题解

UVA1439题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min61xbk
此快照首次捕获于
2025/12/01 21:09
3 个月前
此快照最后确认于
2025/12/01 21:09
3 个月前
查看原文
首先理解题意,给出无向图,给每一条边定向成为有向无环图,使得最长路的长度最短,这里的最长路长度指最长路上点的个数。如果令 disidis_i 表示以 ii 号点结尾的最长路的长度,那么最后答案应该为 max(disi)\max(dis_i)
首先观察性质,如果 disi=disjdis_i = dis_j,那么证明 iijj 之间没有直接的边,因为根据最长路转移的不等式可知如果设从 iijj 有一条边,那么 disjdisi+1dis_j \ge dis_i + 1,不符合 disi=disjdis_i = dis_j,所以不存在从 iijj 的边;反之同理。
那么当我们定向完成之后,可以求出对于任意点 iidisidis_i,那么我们根据 disidis_i 的值分层,值相同的分为一层,那么根据上述性质可知,每层点内部无边。为了让最长路最短,那么应该在上述条件下,使得层数最少。
形式化的讲:原问题为找到无向图 GG 的一个定向 DD,使得 D|D| 的值最小,其中 D|D| 表示 DD 中最长路径的包含的点数,即本题中的长度;新问题为找到 VV 的一个分层 KK,即把点分为若干个集合,并且每个集合内部无边,使得 K|K| 最少,其中 K|K| 表示分层的个数。原问题与新问题可证明完全等价。
首先证明,如果 GG 有一个定向 DD,那么存在 VV 的一个分层 KK,使得 D=K|D| = |K|,其中运算与上文描述相同。因为 D=max(disi)|D| = \max(dis_i)disidis_i 表示为以 ii 结尾的最长路所包含的点数,即本题中的长度。由上文证明可得 iijj 之间无边与 disi=disjdis_i = dis_j 等价。那么假设已经确定了一个 GG 的定向 DD,可以求出对于任意一个点 iidisidis_i,把所有 disi=kdis_i = k 的点 ii 放到第 kk 个集合中,其中 k[1,D]k \in [1,|D|],因为每一个集合中互相无边,那么即构成了一个分层 KK,且分到的层数 K|K|,即集合个数,刚好为 D|D|
其次证明,如果 VV 有一个分层 KK,那么存在 GG 的一个定向 KK,使得 KD|K| \ge |D|,其中运算与上文描述相同。假设存在一个 VV 的分层 KK,每一层内部都是没有边的且每一层之间存在边,假设把每一层按照不同的 disdis 从小到大排序,那么假设两个点 iijj 分别位于不同的层且 iijj 更靠左,将所有的边向右连,那么最长路在每一层最多选一个点,因此 D=max(disi)K|D| = \max(dis_i) \le |K|
最后综合上述证明,假设 KK 是最小的分层,那么根据上述结论可以推出,存在一个 GG 的定向 DD,使得 DK|D| \le |K|。另一方面,D|D| 不可能小于 K|K|,因为如果 D<K|D| < |K|,那么根据上述结论可以推出,存在分层 KK' 使得 K=D|K'| = |D|,那么 K<K|K'| < |K|,与 KK 为最小的分层这个条件相悖,所以 D=K|D| = |K|
那么问题变成了把点集分成若干个子集,每个子集内部无边,为独立集,显然可以状压动态规划。

评论

0 条评论,欢迎与作者交流。

正在加载评论...