题意:
给出一个图的DFS和BFS遍历,求出改图
分析:
直接在DFS序列中,每相邻点间连一条边。然后要保证BFS序列,直接把所有点按序连到1号点即可。
图不存在的情况是BFS和DFS的第二个点不一致。
加边的时候务必注意不能加重了(因为该原因导致最终没过掉该题。)
代码:
#define maxn 5010
int a[maxn], b[maxn];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
if (n >= 2 && a[1] != b[1]) {
puts("-1");
return 0;
}
printf("%d\n", 2 * n - 3);
for (int i = 1; i < n; i++) {
printf("%d %d\n", b[i - 1], b[i]);
}
for (int i = 2; i < n; i++) {
printf("%d %d\n", 1, a[i]);
}
}