
[tree] organize Party
Một công ty có n
nhân viên được đánh số từ 1
tới n
, mỗi nhân viên trong công ty đều có duy nhất 1 người quản lý trực tiếp hoặc không có ai quản lý. Nhân viên A được gọi là quản lý của nhân viên C nếu thỏa mãn 1 trong các điều kiện:
- A là quản lý trực tiếp của C.
- A là quản lý của B và B là quản lý của C.
Giám đốc muốn tổ chức một trò chơi để mọi người quen biết nhau hơn, do đó giám đốc muốn chia n
nhân viên thành các đội với mỗi đội có ít nhất 1 người và trong mỗi đội không có ai là quản lý của ai. Bạn hãy viết hàm giúp giám đốc xác định số đội ít nhất có thể chia biết trong công ty không tồn tại quản lý vòng tròn như sau:
- A quản lý B, B quản lý C và C quản lý A.
Ví dụ
- Cho
P = [-1, 1, 1, 2, 3, -1]
. Output là :
Giải thích:- Công ty có 6 nhân viên.
P
là mảng một chiều với ý nghĩa:P[i]
là người quản lý trực tiếp của nhân viêni
, nếuP[i] = -1
thì nhân viên thứi
không có ai quản lý. Có thể thấy sơ đồ quản lý trong công ty trông như sau:- Từ sơ đồ có thể chia các nhân viên thành 3 nhóm như sau:
- Nhóm 1: Nhân viên thứ
4
và nhân viên thứ5
. - Nhóm 2: Nhân viên thứ
2
và nhân viên thứ3
. - Nhóm 3: Nhân viên thứ
1
. - Nhân viên thứ
6
do không ai quản lý và cũng không quản lý ai nên có thể chia vào bất cứ nhóm nào.
- Nhóm 1: Nhân viên thứ
- Cho
p = [-1, 1]
, output làorganizeParty(p) = 2
.
Đầu vào/Đầu ra
-
[Giới hạn thời gian chạy] 0.5s với C++, 3s với Java và C#, 4s với Python, JS và Go
-
[Đầu vào] Array of integer arr.
1 <= P.size <= 1000
1 <= P[i] <= 1000 hoặc P[i] = -1.
-
[Đầu ra] Integer
Post Comment