Big-O Coding Logo
Big-OCoding
Khóa họcLộ trìnhLuyện phỏng vấnThi đấuBài tậpBảng xếp hạngAI Coding LabSắp ra mắtPremium
Quay lại
Đề bài
|
Lời giải
|
Bài nộp
|
Thảo luận (0)

Đếm cặp đỉnh

Nguồn: Big-O

Secret 512MB

Trong chuyến nghỉ dưỡng tại Hawaii năm nay, các thành viên Big-Omega đã cùng nhau chơi một trò chơi như sau: Cho một đồ thị dạng cây gồm N đỉnh, N−1N - 1N−1 cạnh và một cặp số nguyên (L,RL, RL,R). Các đỉnh được đánh số từ 1 đến N, trong đó đỉnh 1 là gốc của cây. Mỗi đỉnh i mang một giá trị viv_ivi​. Với mỗi đỉnh u, gọi dud_udu​ là số lượng giá trị viv_ivi​ phân biệt nằm trong cây con gốc u (tính cả u).

Hãy tính countucount_ucountu​ là số lượng cặp đỉnh (x,y) (1≤x<y≤N)(x, y)\ (1 \leq x \lt y \leq N)(x,y) (1≤x<y≤N) thỏa mãn cả hai điều kiện sau:

  • x và y nằm ở hai nhánh con khác nhau của u.
  • L≤∣dx−dy∣≤RL \leq |d_x - d_y| \leq RL≤∣dx​−dy​∣≤R.

Tèo là một thành viên mới của Big-Omega năm nay. Để gây ấn tượng với mọi người trong công ty và giành giải thưởng, Tèo quyết tâm giải bằng được câu đố hóc búa này. Mặc dù không biết gì về lập trình, Tèo vẫn rất tự tin vì có một người bạn thân là lập trình viên chuyên nghiệp có thể giải quyết mọi bài toán khó nhằn. Bạn hãy giúp Tèo giải bài toán này thật nhanh nhé!

Đầu vào:

  • Dòng đầu tiên chứa số nguyên dương N — số lượng đỉnh của cây (1≤N≤1051 \leq N \leq 10^51≤N≤105).
  • Dòng thứ hai chứa hai số nguyên L và R (0≤L≤R≤N−10 \leq L \leq R \leq N - 10≤L≤R≤N−1).
  • Dòng thứ ba chứa N số nguyên dương v1,v2,…,vNv_1, v_2, \dots, v_Nv1​,v2​,…,vN​ — tương ứng là giá trị của các đỉnh (1≤vi≤1091 \le v_i \le 10^91≤vi​≤109).
  • N−1N - 1N−1 dòng tiếp theo, mỗi dòng chứa hai số nguyên dương u và v — mô tả một cạnh nối giữa hai đỉnh u và v trong cây (1≤u,v≤N,u≠v1 \le u, v \le N, u \neq v1≤u,v≤N,u=v).
  • Dữ liệu đầu vào đảm bảo tạo thành một cây hợp lệ.

Đầu ra:

  • In ra trên một dòng duy nhất gồm N số nguyên count1 count2 … countNcount_1\ count_2\ \dots\ count_Ncount1​ count2​ … countN​ cách nhau bởi dấu cách — đại diện cho kết quả tại từng đỉnh.

Giải thích: Hình dưới đây minh họa cây trong ví dụ mẫu. Mỗi đỉnh được biểu diễn bởi hai thông số: chỉ số đỉnh / giá trị của đỉnh đó.

Theo hình minh họa, số lượng giá trị phân biệt trong cây con của mỗi đỉnh là:

  • d1=7d_1 = 7d1​=7 (Các giá trị trong cây con của đỉnh 1 lần lượt là 1, 2, 4, 6, 8, 9, 10).
  • d2=1d_2 = 1d2​=1 (10)
  • d3=1d_3 = 1d3​=1 (8)
  • d4=1d_4 = 1d4​=1 (9)
  • d5=7d_5 = 7d5​=7 (1, 2, 4, 6, 8, 9, 10)
  • d6=4d_6 = 4d6​=4 (2, 4, 8, 10)
  • d7=1d_7 = 1d7​=1 (4)
  • d8=2d_8 = 2d8​=2 (2, 4)
  • d9=1d_9 = 1d9​=1 (10)
  • d10=6d_{10} = 6d10​=6 (2, 4, 6, 8, 9, 10)

Giá trị counticount_icounti​ tương ứng của mỗi đỉnh i:

  • count1=8count_1 = 8count1​=8: Gồm các cặp đỉnh (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10). Mỗi cặp gồm hai đỉnh x, y nằm ở hai nhánh con khác nhau của đỉnh 1 và thỏa mãn 0≤∣dx−dy∣≤90 \leq |d_x - d_y| \leq 90≤∣dx​−dy​∣≤9.
  • count2=count3=count4=count5=count7=count8=count9=0count_2 = count_3 = count_4 = count_5 = count_7 = count_8 = count_9 = 0count2​=count3​=count4​=count5​=count7​=count8​=count9​=0 vì các đỉnh này có không quá một nhánh con.
  • count6=5count_6 = 5count6​=5: Gồm các cặp đỉnh (3, 7), (3, 8), (3, 9), (7, 9), (8, 9).
  • count10=5count_{10} = 5count10​=5: Gồm các cặp đỉnh (3, 4), (4, 6), (4, 7), (4, 8), (4, 9).

Ví dụ 1:

Đầu vào:

10
0 9
4 10 8 9 1 8 4 2 10 6
10 4
9 6
3 6
6 10
5 1
2 1
5 10
6 8
8 7

Đầu ra:

8 0 0 0 0 5 0 0 0 5 
Chỉ viết thân hàm, hệ thống tự lo Input/Output
Bài này không hỗ trợ chế độ Viết chương trình
Bật gợi ý code
|
Loading...
Test Case
|
Output
Ln 1, Col 1
Đang tải test ví dụ...