#P5419. [CTSC2016] 单调上升序列

    ID: 4356 远端评测题 1000ms 500MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2016WC/CTSC/集训队Special JudgeO2优化

[CTSC2016] 单调上升序列

题目描述

对于一个带权无向图,我们可以考察它的单调上升路径。

一条路径被称为单调上升的,如果沿着它走时的权值是单调递增的。

注意,路径由多条首尾相连的边组成,且可经过同一顶点多次。路径的长度为它包含的边数。

举例来说:下图中 $v_2 \rightarrow v_4 \rightarrow v_1 \rightarrow v_2$ 是一条单调上升路径,因为每条边的权值为 1,2,41,2,4。这条路径的长度为 33。更进一步的,你可以验证下图中所有的单调上升路径的长度都不超过 33

例子

下面的结论指出在某些图中总会存在一个比较长的单调上升路径:

结论:假设带权无向图 GG100100 个节点 10001000 条边,且所有权值各不相同。那么,GG 中一定存在一个单调上升路径,它的长度大于等于 2020

证明:假设每个节点上有一个探险家。我们按权值从小到大枚举所有的边,每次将该边连接的节点中的探险家的位置进行对调。可以知道,每个探险家都走的是一条单调上升路径。另外,由于共有 100100 个探险家,而探险家一共走了 20002000 步,所以有人走了 2020 步。证毕。

现在,我们的问题是:

给定一个完全图 GG,它的顶点个数为一个偶数 NN

你的任务是给每条边选一个不同的权值,要使得最长的单调上升路径最短。

输入格式

输入仅一行一个正偶数 NN

输出格式

输出整数 11N(N1)2\frac{N(N-1)}{2} 的一个排列,相邻的数之间用一个空格或换行隔开。

第一个数代表你给边 (1,2)(1,2) 选的权值;第二个数是给 (1,3)(1,3) 的权值,……,第 NN 个数是给 (1,N)(1,N) 的权值;然后是 (2,3)(2,3) 的权值,(2,4)(2,4) 的权值,……,(2,N)(2,N) 的权值;然后是 (3,4)(3,4)(3,N)(3,N) 的权值;以此类推;最后是 (N1,N)(N-1,N) 的权值。

4
4 6 2
3 1
5

6

12 8 15 3 5
6 7 1 13
10 14 11
4 2
9

提示

数据规模与约定

  • 对于 20%20\% 的数据,满足 N20N \leq 20;
  • 对于 50%50\% 的数据,满足 N100N \leq 100;
  • 对于 100%100\% 的数据,满足 2N5002 \leq N \leq 500

说明

除不同的测试点有不同特点外,每个测试点你也可能获得部分分。如果你的程序能正确结束并按输出格式输出,我们将用下列方式评分:

假设你的图中最长单调上升路径的长度为 AA,正确答案为 BB

  • 如果 A=BA=B,你的得分为 1010 分;
  • 如果 B<A<2BB < A < 2B,你的得分为 33 分;
  • 如果 A2BA \geq 2B,你的得分为 00 分。