Advertisement
trungore10

testsol_NOBITA

Sep 22nd, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. - Đây là cây MST nên cách thức xây cây của ta chính lá sort các cạnh lại rồi DSU dần dần, thì ta có cách trâu là dijkstra từ tất cả các đỉnh đặc biệt để tính n^2 cạnh được tạo ra --> đpt : n^2 log
  2. - Cải tiến :
  3. + Ta dijkstra để tìm đường đi nhỏ nhất đến các đỉnh đặc biệt mà đỉnh xuất phải không phải là đỉnh đặc biệt đó
  4. * Ta xử lí cái này bằng cách dijkstra 2 lần và ta sẽ tính d[u][type], type = [1..2] --> độ dài ngắn nhất khi đến
  5. đỉnh u và có 2 đỉnh xuất phát khác nhau (đỉnh xuất phát là các đỉnh đặc biệt), ta làm được điều này bằng cách 2 lần
  6. dijkstra, lần 1 bỏ tất cả các đỉnh đặc biệt vào heap khi khởi tạo, lần 2 ta bỏ tất cả các đỉnh và đưuòng đi ngắn thứ
  7. nhất của nó vào heap
  8.  
  9. + Thì tất cả các đỉnh đặc biệt sẽ biết được đường đi ngắn nhất đến nó mà không phải xuất phát từ chính nó, và cũng nhận thấy rằng các đường đi đó sẽ nằm trong MST.
  10. + Trường hợp không may xảy ra của ta là nút u có đường đi thỏa mãn là từ nút v và nút v cũng có đường đi thỏa mãn là từ nút u, nên nó sẽ không tạo thành cây. Nhưng nhận thấy là ta sau mỗi lần tìm ta sẽ merge lại nhưng thằng có cạnh nối với nhau thành 1 đỉnh rồi tiếp tục làm tương tự thì số lần dijkstra lại của ta sẽ không quá log lần do mỗi lần mình merge thì mỗi đỉnh phải nối ít nhất với 1 đỉnh khác nên là số đỉnh nó sẽ được chia đôi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement