Editorial for Chuyến bay bầu cử


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: creator

Áp dụng thuật toán Dijkstra, ngoài mảng dist[] lưu chi phí ngắn nhất xuất phát từ quốc gia 1 ta lưu thêm các mảng:

cnt_path[],cnt_path[i] là số cách bay ít chi phí nhất từ quốc gia 1 tới quốc gia i.

min_flt[], min_flt[i] là số chuyến bay tối thiểu với tổng chi phí là ít nhất tới quốc gia i.

max_flt[], max_flt[i] là số chuyến bay tối đa với tổng chi phí là ít nhất tới quốc gia i.

Mỗi khi cập nhật dist[i] từ đỉnh j, cập nhật các mảng trên như sau:

  • cnt_path[i]=cnt_path[j]
  • max_flt[i]=max_flt[j]+1
  • min_flt[i]=min_flt[j]+1
  • (Số cách bay tối ưu tới thành phố i bằng số cách bay tối ưu tới thành phố j, số chuyến bay tới i bằng số chuyến bay tới j thêm 1)

Ngoài ra nếu dist[i]=dist[j] ta cũng phải cập nhật lại các mảng:

  • cnt_path[i]+=cnt_path[j]
  • cnt_path[i]mod1000000007
  • max_flt[i]=max(max_flt[i],max_flt[j]+1)
  • min_flt[i]=min(min_flt[i],min_flt[j]+1)

dist[n],cnt_path[n],min_flt[n],max_flt[n] là kết quả của bài toán.


Comments

There are no comments at the moment.