UOJ#109. 【APIO2013】TASKSAUTHOR 构造

原文链接www.cnblogs.com/zhouzhendong/p/UOJ109.html

题解

Task1:

造一个101个点,没有边的图。

Task2:

\(n = 100\)。造一条从 \(n\)\(1\) 的链,然后不断随便加边权为 \(\infty\) 的边,尽量多加。

最后问 \(10\)\(n\)\(1\) 的最短路即可。

算一下刚好卡掉了bellman-ford

Task3:

做法和 Task1 一样。造一个101个点,没有边的图。

Task4:

首先,由于 \(n\leq \frac T 2 = \frac {157} 2\),无论如何也卡不掉 Floyd,所以只要考虑卡 dijkstra。

注意到他这个魔改版的 dijkstra 其实和 spfa 的某个优化版本很像。

我们考虑造一个图把它卡成指数级的。

首先我们考虑一下这么一个结构:

其中 \(2 \leq x\)。我们发现会先松弛 B,再松弛 C,再松弛 B。于是我们想办法把这个元件连成一排,并使得每次某一个点被松弛时,都要把从它到最右端点的每一条路径松弛一遍。

所以图大概长这样:

假设当前节点 \(i\) 被松弛了,容易发现它到 \(n\) 的所有路径中最难松弛的是沿着 \(-1\) 走的那条,所以有:

\[-x_i - (n - i) < -1 - \sum_{j = i + 1} ^ {n-1} x_j \]

\(x _ i = 2 ^ {n-i}\) 即可。

Task5:

和 Task2 做法类似。

Task6:

和 Task4 做法类似。

Task7:

其实由题目里给出的条件可以确定 \(E = 1501\)

我们发现它的算法就是一个裸的 dfs,于是随便造一个图就卡掉了。

Task8:

首先 \(E = 1501\)。我的想法是让这个 dfs 在第一次递归到底的时候就得到一个解。这意味着该图可以二染色,是一个二分图。于是我们只需要让 \(1\cdots \lfloor n/2 \rfloor\) 为左侧点,剩余的为右侧点,然后为了保证每个点第一次被枚举的颜色就是对的,我们让左侧的一个点连向右侧的所有点,然后剩下的边随便连即可。

相关答案文件

点击下载: tasksauthor.zip

posted @ 2020-09-08 23:34  zzd233  阅读(217)  评论(0编辑  收藏  举报