Điều hướng chính

Ngôn ngữ

Phím tắt

/
Chuyển đến ô tìm bài
g p
Đi đến bài tập
g c
Đi đến kỳ thi
g u
Đi đến người dùng
?
Mở trợ giúp phím tắt

Bài tập

Bài được chọn theo nhịp luyện tập của bạn, cùng mọi bài mới vừa lên.

root

Biến Đổi Trên Cây

100 điểm

Minh Anh được mời để đưa ra một bài toán khó cho cuộc thi "coding ao làng" vừa được tổ chức gần đây. Phân vân với những ý tưởng của mình, cô ấy đang cân nhắc sử dụng bài toán sau.

Bạn được cho một cây không trọng số gồm \(N\) đỉnh, với gốc là đỉnh \(1\). Mỗi đỉnh \(i\) có một giá trị \(v_i\) đi kèm. Cấu trúc cây được mô tả bởi mảng \(p_1, p_2, \dots, p_{N-1}\), trong đó \(p_i\) là cha của đỉnh \(i+1\).

Một hàm \(f(y)\) được định nghĩa cho một đỉnh \(y\) trong cây như sau:

\[ f(y) \; = \; \sum_{x \in S_y} d(x, y) \cdot v_x \]

trong đó \(d(x, y)\) là khoảng cách giữa hai đỉnh \(x\) và \(y\), còn \(S_y\) là tập các đỉnh mà \(y\) là tổ tiên của chúng.

Bạn được cho \(Q\) truy vấn, mỗi truy vấn gồm hai đỉnh \(x\) và \(y\). Với mỗi truy vấn, cần mô phỏng các thao tác sau trên cây và tính giá trị \(f(y)\):

  • Gắn tất cả các đỉnh mà cha của chúng là \(x\) sang cha của \(x\).
  • Loại bỏ \(x\) khỏi cây.
  • Chèn lại đỉnh \(x\) vào cây, giữa \(y\) và một hậu duệ của \(y\) thuộc cây con trước đó chứa \(x\).

Nếu \(y\) là cha của \(x\), cấu trúc cây không thay đổi. Luôn đảm bảo \(x\) thuộc cây con của \(y\). Sau mỗi truy vấn, giá trị \(f(y)\) được tính trên cây đã tạm thời thay đổi, sau đó cây trở về trạng thái ban đầu.

Input

  • Dòng đầu tiên chứa hai số nguyên \(N\) và \(Q\) (\(1 \le N, Q \le 5 \cdot 10^5\)) --- số đỉnh của cây và số truy vấn.
  • Dòng thứ hai chứa \(N\) số nguyên \(v_1, v_2, \dots, v_N\) (\(1 \le v_i \le 10^6\)) --- giá trị của từng đỉnh.
  • Dòng thứ ba chứa \(N-1\) số nguyên \(p_1, p_2, \dots, p_{N-1}\) (\(1 \le p_i \le i\)) --- \(p_i\) là cha của đỉnh \(i+1\).
  • Mỗi dòng trong \(Q\) dòng tiếp theo chứa hai số nguyên \(x\) và \(y\) (\(1 \le x, y \le N\)) --- các đỉnh liên quan đến thao tác đã mô tả.

Output

  • In ra \(Q\) dòng, mỗi dòng là giá trị của hàm \(f(y)\) trên cây sau khi thực hiện thao tác của truy vấn tương ứng.

Example

Test 1

Input
3 1
1 2 3
1 2
3 1
Output
7

Test 2

Input
3 2
4 5 6
1 1
2 1
3 1
Output
11
11

Test 3

Input
5 3
2 5 2 2 2
1 2 3 2
4 3
3 2
5 1
Output
2
8
26

Scoring

\begintabular|c|c|l|
\hline
Subtask & Điểm & Ràng buộc

\hline
1 & 21 & \(1 \le N, Q \le 1000\)

2 & 27 & Cây là một dây chuyền, \(p_i = i\) với mọi \(i\) từ \(1\) đến \(N-1\)

3 & 22 & Mỗi đỉnh là cha của nhiều nhất \(20\) đỉnh con

4 & 30 & Không có ràng buộc bổ sung

\hline
\endtabular

root

Chia phe

100 điểm

Quốc gia Zortax bao gồm \(N\) thành phố, được đánh số từ \(1\) đến \(N\), kết nối bởi \(N-1\) con đường hai chiều. Mỗi con đường nối giữa hai thành phố và cho phép di chuyển hai chiều. Toàn bộ hệ thống giao thông tạo thành một mạng lưới liên thông.

Hiện tại, Zortax được chia thành \(K\) vùng, đánh số từ \(1\) đến \(K\). Mỗi thành phố thuộc đúng một vùng. Thành phố thứ \(j\) thuộc vùng \(S_j\) \((1 \le j \le N)\). Mỗi vùng có ít nhất một thành phố.

Tổng thống đương nhiệm -- bà Zelia -- lo ngại rằng đất nước có thể bị chia rẽ bởi mâu thuẫn chính trị giữa các vùng. Zortax được gọi là có nguy cơ ly khai nếu tồn tại cách chia toàn bộ \(N\) thành phố thành hai phe \(X\) và \(Y\) sao cho thỏa mãn tất cả các điều kiện sau:

  • Mỗi thành phố thuộc hoặc phe \(X\) hoặc phe \(Y\).
  • Cả hai phe đều có ít nhất một thành phố.
  • Các thành phố trong cùng một vùng thuộc cùng một phe.
  • Có thể di chuyển giữa bất kỳ hai thành phố thuộc phe \(X\) chỉ qua các thành phố thuộc phe \(X\).
  • Có thể di chuyển giữa bất kỳ hai thành phố thuộc phe \(Y\) chỉ qua các thành phố thuộc phe \(Y\).

Để đảm bảo sự thống nhất quốc gia, tổng thống Zelia muốn thực hiện các cuộc sáp nhập vùng: mỗi lần, bà chọn hai vùng bất kỳ và gộp lại thành một vùng duy nhất (mọi thành phố của hai vùng sẽ cùng thuộc vùng mới).

Bạn hãy giúp tổng thống tính số lần sáp nhập tối thiểu cần thiết để đảm bảo Zortax không thể ly khai.

Lưu ý: nếu ban đầu chỉ có một vùng (\(K = 1\)), thì quốc gia chắc chắn không thể bị chia rẽ.

\InputFile

  • Dòng đầu tiên chứa hai số nguyên \(N\) và \(K\) \((1 \le N \le 5 \times 10^5, 1 \le K \le N)\).
  • \(N - 1\) dòng tiếp theo, mỗi dòng gồm hai số nguyên \(A_i, B_i\) \((1 \le A_i, B_i \le N)\), biểu diễn một con đường nối hai thành phố.
  • \(N\) dòng tiếp theo, dòng thứ \(j\) chứa số \(S_j\) \((1 \le S_j \le K)\) --- mã vùng của thành phố thứ \(j\).

\OutputFile

In ra một số nguyên --- số lần sáp nhập tối thiểu để Zortax không thể bị chia rẽ nữa.

\Scoring

  • Subtask 1 (20%): \(N \le 100\), \(K \le 7\)
  • Subtask 2 (33%): \(N \le 3000\)
  • Subtask 3 (20%): \(N \le 100\,000\), \(K \le 50\)
  • Subtask 4 (27%): Không có ràng buộc bổ sung

Example

Test 1

Input
5 4
1 2
2 3
3 4
3 5
1
2
1
3
4
Output
1

Test 2

Input
5 4
1 2
2 3
3 4
4 5
1
2
3
4
1
Output
0

root

Hấp thụ năng lượng

100 điểm

Bạn đang chơi một trò chơi điện tử nổi tiếng của Marvel có tên là Dr. Strange. Trong trò chơi này, bạn nhập vai một siêu anh hùng đang giải cứu thế giới bằng cách hấp thụ sức mạnh của các quái vật.

Bạn được cung cấp danh sách \(N\) quái vật. Quái vật thứ \(i\) xuất hiện tại thời điểm \(L_i\) và tồn tại cho đến thời điểm \(R_i\) (bao gồm cả \(L_i\) và \(R_i\)). Mỗi quái vật có một cấp độ sức mạnh \(P_i\). Nhiều quái vật có thể xuất hiện cùng một lúc.

Để chiến đấu, bạn thực hiện \(M\) lần hấp thụ sức mạnh liên tiếp theo thứ tự. Trước lần hấp thụ đầu tiên, bạn bắt đầu với một giá trị sức mạnh đã hấp thụ ban đầu là \(\text{Power}_0 = 1\) (hấp thụ từ chính bản thân bạn).

Đối với mỗi lần hấp thụ \(j = 1, 2, \ldots, m\), năng lượng khả dụng \(E_j\) của bạn tại thời điểm đó được tính theo công thức:

\[E_j = 1 + (D_j \cdot \text{Power}_{j-1} + A_j) \bmod F_j\]

Trong đó, \(D_j\) là hệ số độ bền (durability), \(A_j\) là hệ số nhanh nhẹn (agility), \(F_j\) là mức độ mệt mỏi (fatigue) ở lần hấp thụ \(j\), và \(\text{Power}_{j-1}\) là tổng sức mạnh quái vật đã hấp thụ được trong lần di chuyển trước đó (\(j-1\)).

Vì bạn là Dr. Strange, bạn có khả năng du hành thời gian. Tại thời điểm \(t_j\) của lần hấp thụ thứ \(j\), với năng lượng \(E_j\) này, bạn sẽ hấp thụ sức mạnh của \(E_j\) quái vật yếu nhất (những quái vật có cấp độ sức mạnh \(P\) nhỏ nhất) đang hiện diện. Nếu tại thời điểm đó có ít hơn \(E_j\) quái vật, bạn sẽ hấp thụ tất cả chúng. Việc hấp thụ sức mạnh của chúng chỉ ảnh hưởng đến năng lượng của bạn mà không làm yếu hay loại bỏ bất kỳ quái vật nào.

Gọi \(\text{Power}_j\) là tổng sức mạnh hấp thụ được trong lần di chuyển thứ \(j\). Nhiệm vụ của bạn là xác định giá trị của \(\text{Power}_1, \text{Power}_2, \ldots, \text{Power}_m\).

Input

  • Dòng đầu tiên chứa hai số nguyên \(N, M\) -- số lượng quái vật và số lần hấp thụ (\(1 \le N, M \le 10^5\)).
  • \(N\) dòng tiếp theo, mỗi dòng chứa ba số nguyên \(L_i, R_i, P_i\) -- thời điểm xuất hiện, thời điểm biến mất, và cấp độ sức mạnh của quái vật thứ \(i\) (\(1 \le L_i \le R_i \le 10^5\), \(1 \le P_i \le 10^7\)).
  • \(M\) dòng tiếp theo, mỗi dòng chứa bốn số nguyên \(t_j, D_j, A_j, F_j\) -- thời điểm thực hiện lần hấp thụ \(j\) và các hệ số tính toán năng lượng. Lưu ý rằng tất cả các giá trị \(t_j\) là một hoán vị của các số từ \(1\) đến \(M\) (\(1 \le t_j \le M\), \(0 \le D_j, A_j \le 10^5\), \(1 \le F_j \le 10^5\)).

Output

In ra \(M\) dòng. Mỗi dòng chứa một số nguyên duy nhất là tổng sức mạnh hấp thụ được trong lần di chuyển thứ \(j\).

Example

Test 1

Input
3 3
1 2 10
2 3 20
1 3 5
1 2 2 2
3 3 1 3
2 1 1 5
Output
5
25
15
Note
  • Lần 1 (Thời điểm \(t_1=1\)): Có 2 quái vật hiện diện (Power 10, 5). Ta có \(\text{Power}_0 = 1\). Năng lượng \(E_1 = 1 + (2 \times 1 + 2) \bmod 2 = 1\). Hấp thụ 1 quái vật yếu nhất (Power 5). \(\text{Power}_1 = 5\).
  • Lần 2 (Thời điểm \(t_2=3\)): Có 2 quái vật hiện diện (Power 20, 5). Ta có \(\text{Power}_1 = 5\). Năng lượng \(E_2 = 1 + (3 \times 5 + 1) \bmod 3 = 2\). Hấp thụ 2 quái vật yếu nhất (Power 5, 20). \(\text{Power}_2 = 5 + 20 = 25\).
  • Lần 3 (Thời điểm \(t_3=2\)): Có 3 quái vật hiện diện (Power 10, 20, 5). Ta có \(\text{Power}_2 = 25\). Năng lượng \(E_3 = 1 + (1 \times 25 + 1) \bmod 5 = 2\). Hấp thụ 2 quái vật yếu nhất (Power 5, 10). \(\text{Power}_3 = 5 + 10 = 15\).

Scoring

  • Subtask \(1\) (\(20\%\) số điểm) : \(N, M \leq 100\).
  • Subtask \(2\) (\(20\%\) số điểm) : \(N, M \leq 2000\).
  • Subtask \(3\) (\(20\%\) số điểm) : \(M = 1\).
  • Subtask \(4\) (\(20\%\) số điểm) : \(t_j < t_{j + 1}\) với mọi \(i = 1..M-1\).
  • Subtask \(5\) (\(20\%\) số điểm) : không có ràng buộc gì thêm.

root

Trang trí lớp

100 điểm

Để chuẩn bị cho ngày lễ kỷ niệm của trường, các bạn trong lớp được giao nhiệm vụ trang trí hai bên tường lớp học bằng các dải màu. Mỗi bên tường sẽ được trang trí theo một quy luật riêng, lặp lại tuần hoàn vô hạn.

Cụ thể:

  • Bên trái lớp học được trang trí theo một dãy màu \(a_1, a_2, \dots, a_n\), và dãy này sẽ lặp lại vô hạn: \(a_i = a_{i+n}\) với mọi \(i\).
  • Bên phải lớp học được trang trí theo một dãy màu \(b_1, b_2, \dots, b_m\), và cũng lặp lại vô hạn: \(b_i = b_{i+m}\) với mọi \(i\).

Bạn Kino là người rất tinh mắt, muốn kiểm tra mức độ khác biệt giữa hai bên tường. Cụ thể, Kino chọn ra \(k\) vị trí đầu tiên (tính từ trái sang phải) và đo độ khác biệt màu sắc giữa hai bên tường ở mỗi vị trí. Độ khác biệt giữa hai màu \(a_i\) và \(b_i\) tại cùng vị trí được xác định bằng phép toán XOR bitwise: \(a_i \oplus b_i\).

Input

  • Dòng đầu tiên chứa ba số nguyên \(n, m, k\) \((1 \leq n, m \leq 10^5,\ 1 \leq k \leq 10^{18})\).
  • Dòng thứ hai chứa \(n\) số nguyên \(a_1, a_2, \dots, a_n\) \((0 \leq a_i \leq 10^{18})\).
  • Dòng thứ ba chứa \(m\) số nguyên \(b_1, b_2, \dots, b_m\) \((0 \leq b_i \leq 10^{18})\).

Output

In ra một số nguyên duy nhất --- tổng độ khác biệt ở \(k\) vị trí đầu tiên, chia dư cho \(10^9 + 7\).

Example

Test 1

Input
10 5 30
5 16 2 10 7 2 4 20 5 12
4 11 14 23 5
Output
435

Test 2

Input
3 2 10
1 6 4
5 2
Output
33

Scoring

\begintabularc c l
\hline
Subtask & Điểm & Ràng buộc

\hline
1 & 18 & \(k \leq 2 \cdot 10^5\)

2 & 13 & \(n\) \(mod\) \(m = 0\)

3 & 30 & \(k \le 10^9\)

4 & 39 & Không có ràng buộc bổ sung

\hline
\endtabular

Xem thêm