ColorGraph

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Cho một đơn đồ thị vô hướng gồm ~n~ đỉnh và ~m~ cạnh. Độ dài của mỗi cạnh là ~1~. Ta định nghĩa khoảng cách giữa hai đỉnh ~u~ và ~v~ là độ đường đi ngắn nhất từ ~u~ đến ~v~.

Ban đầu, tất cả các đỉnh được tô màu ~0~. Cho ~q~ truy vấn, truy vấn thứ ~i~ yêu cầu tô màu ~c_i~ cho tất cả các đỉnh có khoảng cách đến ~u_i~ nhỏ hơn hoặc bằng ~d _i~.

Hãy cho biết màu của từng đỉnh sau khi thực hiện xong ~q~ truy vấn trên.

Input

  • Dòng đầu ghi hai số nguyên dương ~n,m~ miêu tả số cạnh và số đỉnh.
  • ~m~ dòng tiếp theo, mỗi dòng gồm hai số nguyên dương ~u_i~ và ~v_i~ ~(u_i, v_i \le n)~ mô tả một cạnh trong đồ thị. Dữ liệu vào đảm bảo đồ thị đã cho là đơn đồ thị.
  • Dòng tiếp theo ghi số nguyên dương ~q~ - miêu tả số truy vấn.
  • ~q~ dòng tiếp theo, mỗi dòng ghi ba số nguyên ~u_i, d_i, c_i~

Giới hạn

  • ~n,m,q \le 10^5~.
  • ~d_i \le 10~.
  • ~c_i \le 10^5~.

Output

In ra ~n~ dòng, dòng thứ ~i~ in ra một số nguyên duy nhất - màu của đỉnh ~i~ sau khi thực hiện ~q~ truy vấn trên.

Sample Input
7 7
1 2
1 4
2 3
3 6
4 5
5 6
6 7
3
7 3 1
5 1 2
5 0 3
Sample Output
0
1
1
2
3
2
1

Time limit: 2.0 / Memory limit: 256M

Point: 100

Một công ty có ~n~ nhân viên đang trong quá trình tái cơ cấu tổ chức. Sau quá trình này, sơ đồ cấp bậc trong công ty tạo thành một đồ thị dạng cây gồm ~n~ đỉnh, mỗi đỉnh là sếp của tất cả các con của chúng.

Mỗi nhân viên có một danh sách gồm ~k_i~ người họ đồng ý làm sếp trực tiếp của mình. Ngoài ra, mỗi nhân viên cần được tính toán lại lương sao cho lương của mỗi người sếp phải lớn hơn tổng lương của những nhân viên người đó quản lí.

Hãy tìm cách tái cơ cấu lại công ty sao cho tổng lương phải trả cho ~n~ nhân viên là nhỏ nhất có thể.

Input

  • Dòng đầu tiên gồm số nguyên dương ~n~ - số nhân viên trong công ty.
  • ~n~ dòng tiếp theo, mỗi dòng bắt đầu bởi số nguyên ~k_i~. Sau đó là ~k_i~ số nguyên dương là danh sách những người được nhân viên thứ ~i~ đồng ý làm sếp của mình.

Output

  • Gồm một số nguyên dương là tổng lương phải trả nhỏ nhất.

Subtask

  • Subtask 1 ~(20\%)~: ~2 \le n \le 10, \sum{k_i} \le 20~
  • Subtask 2 ~(45\%)~: ~2 \le n \le 200, \sum{k_i} \le 200~.
  • Subtask 3 ~(35\%)~: ~2 \le n \le 5000, \sum{k_i} \le 10000~.

Sample Input 1

4
1 4
3 1 3 4
2 1 2
1 3

Sample Output 1

8

Explanation 1

    3
   / \ 
  4   2
 /
1

Lương của từng người là ~[1, 1, 2, 4]~.


Đồ thị XOR

Nộp bài
Time limit: 1.7 / Memory limit: 1G

Point: 100

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài


Xor Move

Nộp bài
Time limit: 2.5 / Memory limit: 256M

Point: 100

Cho số nguyên dương ~n~ và dãy số nguyên không âm ~a_1,a_2,...,a_n~. Ta định nghĩa khoảng cách giữa hai số ~x~ và ~y~ là số lần ít nhất phải thực hiện các thao tác sau để biến ~x~ thành ~y~:

  • Chọn một lũy thừa của ~2~, kí hiệu là ~2^z~.

  • Thực hiện phép gán ~x = x~ ~\oplus~ ~2^z~

Trong đó ~\oplus~ là phép toán ~XOR~ được cho bởi bảng giới đây:

~x~ ~y~ ~x~ ~\oplus~ ~y~
~0~ ~0~ ~0~
~0~ ~1~ ~1~
~1~ ~0~ ~1~
~1~ ~1~ ~0~

Việc thực hiện phép ~XOR~ trên hai số nguyên là thực hiện phép ~XOR~ trên từng bit trong biểu diễn nhị phân của hai số.

Yêu cầu: Với mỗi số ~a_1,a_2,...,a_n~; hãy tìm một số khác trong dãy có khoảng cách tới số đó là bé nhất.

Input

  • Dòng đầu tiên chứa số nguyên dương ~n~ (~2\le n \le 5 \times 10^5~) là số phần tử của dãy.

  • Dòng thứ hai chứa ~n~ số nguyên không âm ~a_1,a_2,...,a_n~ (~a_i \le 5 \times 10^5~) mô tả dãy được cho.

Output

  • ~n~ số nguyên, mỗi số nguyên là khoảng cách gần nhất ứng với một phần tử trong phương án tối ưu tìm được.

Scoring

Subtask Điểm Giới hạn
1 ~20\%~ ~n \le 5000~
2 ~20\%~ ~a_i \le 100~ với mọi ~i~
3 ~30\%~ ~n,a_i\le 5 \times 10^4~ với mọi ~i~
4 ~30\%~ Không có ràng buộc gì thêm

Sample Input 1

6
1 2 4 3 8 15

Sample Output 1

1 1 2 1 2 2

Change Robot Move

Nộp bài
Time limit: 2.5 / Memory limit: 1G

Point: 100

Có một ma trận dạng lưới ô vuông gồm ~m~ hàng và ~n~ cột. Các hàng được đánh số từ ~1~ đến ~m~ theo thứ tự từ trên xuống dưới, các cột được đánh số từ ~1~ đến ~n~ theo thứ tự từ trái qua phải. Ô nằm trên hàng ~i~ và cột ~j~ được ký hiệu là ~(i, j)~. Một số ô trên lưới có chứa chướng ngại vật, các ô còn lại là ô trống.

Có một con robot di chuyển trên lưới này. Vị trí xuất phát và vị trí kết thúc của con robot là những ô trống đã được cố định từ trước. Con robot được cài sẵn một chuỗi lệnh điều khiển là một xâu ký tự ~C~. Mỗi lệnh của chuỗi là một trong các ký tự U, D, L, R, H. Gọi vị trí hiện tại của robot là ~(i, j)~. Ý nghĩa của từng ký tự lệnh như sau:

  • U: Đi lên trên ~1~ bước tới ô ~(i - 1, j)~
  • D: Đi xuống dưới ~1~ bước tới ô ~(i + 1, j)~
  • L: Đi sang trái ~1~ bước tới ô ~(i, j - 1)~
  • R: Đi sang phải ~1~ bước tới ô ~(i, j + 1)~
  • H: Đứng yên tại ô ~(i, j)~

Con robot sẽ lần lượt thực hiện các lệnh trong chuỗi lệnh ~C~. Chú ý rằng, nếu một lệnh làm con robot đi ra ngoài bảng hoặc đi vào một ô có chướng ngại vật, con robot sẽ bỏ qua và không thực hiện lệnh di chuyển này.

Người ta nhận thấy rằng, nếu xuất phát tại vị trí đã chọn, sau khi thực hiện hết các lệnh trong chuỗi lệnh ~C~, con robot có thể không dừng lại ở vị trí kết thúc đã chọn. Vì vậy, ta cần sửa lại xâu ký tự ~C~ để con robot sẽ dừng lại tại đúng vị trí kết thúc mong muốn sau khi kết thúc thực hiện chuỗi lệnh ~C~. Trong mỗi phép biến đổi, bạn được thực hiện một trong ba thao tác sau:

  • Chèn thêm một lệnh vào chuỗi ~C~ ở một vị trí bất kỳ.
  • Thay đổi một lệnh bất kỳ trong chuỗi ~C~.
  • Xoá đi một chuỗi con liên tiếp bất kỳ của chuỗi ~C~.

Hãy sử dụng ít phép biến đổi nhất có thể để với chuỗi lệnh ~C~, robot sẽ bắt đầu ở vị trí xuất phát đã chọn và kết thúc ở vị trí kết thúc đã chọn. Chú ý rằng, bạn không cần cực tiểu hoá số bước di chuyển của robot, chỉ cần số bước biến đổi chuỗi lệnh là nhỏ nhất có thể. Các ô xuất phát và kết thúc của robot là các ô trống. Trên hành trình của mình, robot có thể đi qua những ô này hay bất kỳ ô trống nào khác một số lần tuỳ ý.

Input

  • Dòng đầu tiên chứa số nguyên ~\Theta~ ~(1 \leq \Theta \leq 6)~ là số thứ tự của subtask chứa test này.
  • Dòng thứ hai chứa hai số nguyên ~m~ và ~n~ ~(1 \leq m, n \leq 175)~.
  • Trong ~m~ dòng tiếp theo, mỗi dòng chứa một xâu ký tự độ dài ~n~ mô tả một hàng của bảng. Mỗi ký tự của những xâu này có thể là . (dấu chấm thể hiện ô trống), # (ô có chướng ngại vật), S (vị trí xuất phát của robot), E (vị trí kết thúc của robot). Dữ liệu vào đảm bảo có chính xác một chữ S và chính xác một chữ E trong lưới.
  • Dòng cuối cùng chứa một xâu ký tự mô tả chuỗi lệnh ~C~ được cài đặt trong robot. Xâu ký tự này chỉ chứa từ 1 đến 300 ký tự, là các chữ cái U, D, L, RH.

Output

Nếu không tồn tại chuỗi lệnh nào giúp robot đi từ vị trí xuất phát tới vị trí kết thúc, in ra số ~-1~ duy nhất. Ngược lại, dòng đầu tiên chứa số nguyên k là số bước biến đổi chuỗi lệnh tối thiểu. Trong k dòng tiếp theo, mỗi dòng thể hiện một phép biến đổi theo một trong ba khuôn dạng sau:

  • INS p c (với ~0 \leq p \leq |C|~ và ~c~ là một trong các chữ cái U, D, L, RH): Chèn ký tự ~c~ vào sau vị trí ~p~ của chuỗi lệnh. Nếu ~p = 0~, ký tự được chèn vào đầu chuỗi lệnh. Nếu ~p = |C|~, ký tự được chèn vào cuối chuỗi lệnh.
  • REP p c (với ~1 \leq p \leq |C|~ và ~c~ là một trong các chữ cái U, D, L, RH): Thay ký tự ở vị trí ~p~ bởi ký tự ~c~.
  • DEL l r (với ~1 \leq l \leq r \leq |C|~): Xoá đi đoạn lệnh liên tiếp từ vị trí ~l~ tới vị trí ~r~.

Ở đây, ~|C|~ là độ dài chuỗi lệnh trước khi phép biến đổi diễn ra. Chú ý rằng, sau mỗi phép biến đổi, các ký tự của chuỗi lệnh được đánh số lại từ 1.

Nếu có nhiều phương án biến đổi chuỗi lệnh tối ưu, bạn được đưa ra một phương án bất kỳ.

Scoring

Bộ test của bài được chia làm các subtask như sau:

  • Subtask ~1~ (~14~ điểm): ~m = 1~.
  • Subtask ~2~ (~10.5~ điểm): Chuỗi lệnh ~C~ chỉ chứa ký tự H.
  • Subtask ~3~ (~10.5~ điểm): Dữ liệu vào đảm bảo tồn tại một phương án biến đổi tối ưu mà không cần sử dụng phép biến đổi DEL (xoá một đoạn liên tiếp).
  • Subtask ~4~ (~10.5~ điểm): ~m, n \leq 20~ và chuỗi lệnh ban đầu có không quá ~50~ ký tự.
  • Subtask ~5~ (~10.5~ điểm): ~m,n \leq 50~ và chuỗi lệnh ban đầu có không quá ~100~ ký tự.
  • Subtask ~6~ (~14~ điểm): Không có ràng buộc gì thêm.

Với mỗi test, bạn được 100% số điểm nếu tìm ra số bước biến đổi tối thiểu mà không đưa ra được phương án biến đổi.

Example

Sample Input 1
4
3 5
....E
S#...
..#..
LRRRDDULLDU
Sample Output 1
3
Giải thích

Trong ví dụ đầu tiên, chuỗi lệnh được biến đổi như sau: LRRRDDULLDU ~\rightarrow~ URRRDDULLDU ~\rightarrow~ URRRU ~\rightarrow~ URRRUR. Chuỗi URRRUR sẽ đưa robot từ vị trí xuất phát tới vị trí kết thúc. Chú ý rằng, lệnh U thứ hai không được thực hiện do robot sẽ bị đi ra ngoài bảng nếu đi lên trên.

Sample Input 2
3
3 5
.....
...SE
.....
LLLRRRRRUUD
Sample Output 2
0