1. 程式人生 > >CSA Round #41 BFS-DFS

CSA Round #41 BFS-DFS

題目連結

題意:

給出一個圖的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]); } }