Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành Unix] Nhận nuôi liên tiếp bởi init

    Nhận nuôi liên tiếp bởi init

    Khi nhiều tiến trình lần lượt kết thúc, mỗi lần một tiến trình chết thì các con trực tiếp của nó được init (PID 1) nhận nuôi (ppid đổi thành 1). Một tiến trình đã được init nhận nuôi, nếu sau đó cha mới (init) vẫn còn sống, sẽ tiếp tục là con của init.

    Cho cây tiến trình và một dãy tiến trình kết thúc theo thứ tự, hãy mô phỏng quá trình reparent rồi in số tiến trình còn sống đang là con trực tiếp của init (ppid = 1, không tính chính init) và danh sách của chúng (pid tăng dần).

    Ví dụ

    Nếu tiến trình 2 rồi 3 chết, các con của chúng dồn về làm con của init.

    • Định dạng đầu vào:

      Dòng 1: n. n dòng: pid ppid. Dòng kế: m. m số: dãy pid kết thúc theo thứ tự.

    • Ràng buộc đầu vào:

      1 ≤ n ≤ 2000; 0 ≤ m ≤ n.

    • Định dạng đầu ra:

      Dòng 1: số con trực tiếp của init còn sống. Dòng 2: danh sách pid tăng dần (rỗng nếu không có).

    Ví dụ:

    Đầu vào:

    5
    1 0
    2 1
    3 2
    4 3
    5 1
    1
    2
    

    Đầu ra:

    2
    3 5

    Giải thích:

    Tiến trình 2 chết, con 3 chuyển thành con init. Còn sống làm con init trực tiếp: 3 và 5.

    Đang tải editor...