QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 2048 MB Points totaux : 100 Difficulté: [afficher] Hackable ✓

#18202. DFS Order 6

Statistiques

Little Cyan Fish는 DFS 순서를 좋아합니다. 오늘 그는 루트가 있는 트리가 아닌, 무방향 단순 그래프에서 DFS 순서를 다시 연구하고 있습니다.

정점 $1$부터 $n$까지 번호가 매겨진 연결된 무방향 단순 그래프 $G$와 시작 정점 $s$를 고정합니다. $G$의 $s$로부터의 DFS 순서는 아래에 제시된 깊이 우선 탐색에 의해 정점들이 처음 방문되는 순서입니다. 방문하지 않은 이웃 중 가장 작은 번호를 가진 정점을 항상 우선적으로 방문함으로써 동점을 처리하므로, DFS 순서는 유일합니다.

알고리즘 1 본 문제에서 사용된 DFS 순서

 1: procedure DFS(vertex x)
 2:     Mark x as visited
 3:     Append x to the end of dfs_order
 4:     for each vertex y adjacent to x in G, in ascending order of label do
 5:         if y is not yet visited then
 6:             DFS(y)
 7:         end if
 8:     end for
 9: end procedure
10:
11: procedure GENERATE(G, vertex s)
12:     Mark all vertices as unvisited
13:     Let dfs_order be an empty list
14:     DFS(s)
15:     return dfs_order
16: end procedure
problem_18202_1.png

7개의 정점과 7개의 간선을 가진 그래프. 정점 1에서 시작하는 DFS 순서는 [1, 2, 3, 7, 4, 5, 6]입니다.

Little Cyan Fish는 $1$부터 $n$까지의 순열 $a_1, a_2, \dots, a_n$을 준비했습니다. 각 $a_i = [a_{i,1}, a_{i,2}, \dots, a_{i,n}]$은 그가 정점 $i$에서 시작했을 때의 DFS 순서라고 주장하는 것입니다.

모든 시작 정점 $i$에 대하여 DFS 순서가 $a_i$와 일치하는 정점 $1, 2, \dots, n$ 위의 연결된 무방향 단순 그래프 $G$를 재구성하거나, 그러한 그래프가 존재하지 않음을 판별하십시오.

입력

여러 테스트 케이스가 존재합니다. 입력의 첫 번째 줄에는 테스트 케이스의 수를 나타내는 단일 정수 $T(1 \le T)$가 주어집니다.

각 테스트 케이스의 첫 번째 줄에는 단일 정수 $n(1 \le n \le 200)$이 주어집니다. 다음 $n$개의 줄에는 각각 $n$개의 정수가 주어집니다. $i$번째 줄에는 Little Cyan Fish가 정점 $i$에서 탐색을 시작했을 때 생성된다고 주장하는 DFS 순서 $a_{i,1}, a_{i,2}, \dots, a_{i,n}(1 \le a_{i,j} \le n)$이 주어집니다. $a_{i,1} = i$임이 보장되며, 각 행 $a_i$는 $1, 2, \dots, n$의 순열입니다.

모든 테스트 케이스에 대한 $n^2$의 합은 $4 \times 10^4$을 넘지 않습니다.

출력

각 테스트 케이스에 대하여, 적절한 그래프가 존재하지 않으면 "No"를 출력하십시오.

그렇지 않으면, 첫 번째 줄에 "Yes"를 출력하십시오. 다음 줄에는 그래프의 간선 수 $m(n - 1 \le m \le \frac{n(n-1)}{2})$을 출력하십시오.

이어지는 $m$개의 줄에는 각각 정점 $u$와 $v(1 \le u, v \le n, u \neq v)$를 나타내는 두 정수를 출력하며, 이는 정점 $u$와 $v$ 사이의 무방향 간선을 의미합니다. 결과 그래프는 단순하고 연결되어 있어야 하며, 각 정점 $i$에서 시작하는 DFS 순서는 $a_i$와 같아야 합니다.

요구 사항을 만족하는 그래프가 여러 개 있다면, 그중 아무거나 출력해도 됩니다.

예제

예제 입력 1

2
3
1 2 3
2 1 3
3 2 1
3
1 2 3
2 3 1
3 1 2

예제 출력 1

Yes
2
1 2
2 3
No

참고

예제 1의 설명: 첫 번째 테스트 케이스에서 경로 $1 - 2 - 3$은 유효한 그래프입니다. 정점 1, 2, 3에서 시작하는 DFS 순서는 각각 [1, 2, 3], [2, 1, 3], [3, 2, 1]입니다. 두 번째 테스트 케이스에서는 적절한 그래프가 존재하지 않습니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.