[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


LÀM BÀI

Points: 100
Time limit: 2.0s
Memory limit: 256M

Author:
Problem types

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.
  • n dòng tiếp theo; dòng i chứa manager[i]. Giá trị -1 nghĩa là nhân sự i khô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 <= 2000
  • manager[i] = -1 hoặc 1 <= 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

There are no comments at the moment.

Zalo