[Buổi 20][Cây cơ bản & DFS trên cây][HW] Bài 1: Phân lớp ca sinh hoạt
Phân lớp ca sinh hoạt
Bối cảnh và bài toán
Một công ty cần chia toàn bộ nhân sự thành các nhóm sinh hoạt sao cho trong cùng một nhóm không có ai là cấp trên trực tiếp hoặc gián tiếp của người khác. Quan hệ quản lý tạo thành một rừng có hướng từ quản lý xuống cấp dưới và không có chu trình.
Yêu cầu
Tìm số nhóm ít nhất cần thiết để thỏa điều kiện.
Input
- Dòng 1 chứa
n. ndòng tiếp theo; dòngichứamanager[i]. Giá trị-1nghĩa là nhân sựikhông có quản lý trực tiếp.
Output
In một số nguyên: số nhóm ít nhất.
Ràng buộc
1 <= n <= 2000manager[i] = -1hoặc1 <= manager[i] <= n- Quan hệ quản lý không có chu trình.
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | n <= 30 | 01–02 |
| S2 | 30% | n <= 500 | 03–05 |
| S3 | 50% | Không có ràng buộc bổ sung | 06–10 |
Ví dụ 1
Input
5
-1
1
2
1
-1
Output
3
Giải thích. Chuỗi quản lý 1→2→3 có độ sâu 3 nên cần ít nhất ba nhóm.
Ví dụ 2
Input
3
-1
-1
-1
Output
1
Giải thích. Không ai là cấp trên của ai; mọi người có thể ở cùng một nhóm.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M07-B20-HW01 |
| Buổi | B20 |
| Loại bài | HOMEWORK |
| Mức độ khó | Dễ (Easy) |
| Thời gian làm bài khuyến nghị | 25 phút |
| Time limit | 2 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Nguồn: Phỏng theo Codeforces 115A – Party.
Comments