Bài này mình làm như sau: Với mỗi (i, j) thì mình xét 4 cạnh kề với nó và tính độ chênh lệch. Tìm độ chênh lệch nào xuất hiện nhiều nhất và dfs với độ chênh lệch đó. 
Nó chưa tối ưu và chưa full điểm.
Cho mình hỏi thuật toán bài này là như thế nào ?
 

Bài này mình dfs+dp f[i][j][k] là đến ii (i,j) và độ chênh lệch là k, rồi lan ra các ô kề nó thôi, nhưng độ chênh lệch có thể rất lớn (tầm 10^6) nên mình hash nó lại cho chỉ còn trong khoảng từ 0->49 thôi 

Bài này có thể duyệt tất cả các mức độ cao rồi dùng disjoint set. Một cạnh lưu (x, y, w).

Trả lời cdsht
  Hiện bài gốc

Cảm ơn a. Tội cái e chưa học hash nên ko cài được :D

Trả lời mikelhpdatke
  Hiện bài gốc

x và y là gì vậy anh?

w là chênh lệch độ cao ạ?

 

Trả lời anhvu_cbl
  Hiện bài gốc

x, y là đại diện cho 1 đỉnh (u, v). Ánh xạ hết cái bảng n*n thành mảng 1 chiều thôi

Trả lời mikelhpdatke
  Hiện bài gốc

master hướng dẫn kĩ hơn đc ko ạ :sexy:

Trả lời vodanhnam
  Hiện bài gốc

Đầu tiên bạn chuyển hết bảng n * n về mảng 1 chiều.

Thì nhận thấy là a(i, j) <= 10^6 nên độ chênh lệch D <= 10^6. Từ đó tạo một cái vector[D] lưu tập các cặp đỉnh (u, v) có độ chênh lệch là D.

Sau đó duyệt từng độ chênh lệch D, với mỗi D xét tất cả các cặp (u, v) có độ chênh lệch D, dùng disjoint set tìm cái liên thông max. 

Trả lời mikelhpdatke
  Hiện bài gốc

Em làm như anh nói rồi ạ. Được 90đ là bị TLE hay WA vậy anh?