BUILD - Xây dựng tuyến đường chi phí nhỏ nhất

View as PDF

Submit solution


Points: 100.00
Time limit: 1.0s
Memory limit: 100M
Input: stdin
Output: stdout

Author:
Problem type
Allowed languages
C, C++, GAS64, Pascal, Perl, PHP, Python, Sed, TCL, Text

Trên một mặt phẳng tọa độ Oxy, có ~N~ thị trấn. Thị trấn thứ ~i~ có tọa độ là ~(x_i,y_i)~. Có thể có nhiều trị trấn có cùng tọa độ với nhau. Giữa hai trị trấn ~i~ và ~j~, có thể xây dựng một tuyến đường hai chiều nối liền hai thị trấn này với chi phí là ~min(|x_i − x_j|, |y_i − y_j|)~.

Yêu cầu đặt ra là hãy xây dựng các tuyến đường với tổng chi phí nhỏ nhất, sao cho giữa hai thị trấn bất kì đều có thể đi được đến nhau.

Dữ liệu

  • Dòng đầu tiên ghi số nguyên ~N~ (2 ≤ ~N~ ≤ ~10^5~) - số thị trấn
  • ~N~ dòng tiếp theo, dòng thứ ~i~ ghi hai số nguyên ~x_i~ và ~y_i~ (1 ≤ ~x_i~, ~y_i~ ≤ ~10^9~) - tọa độ của thị trấn thứ ~i~

Kết quả

  • Ghi ra một số nguyên duy nhất là tổng chi phí xây dựng các tuyến đường nhỏ nhất

Ví dụ

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

Giải thích

Ở ví dụ đầu tiên, ta sẽ xây dựng các tuyến đường sau:

  • Tuyến đường giữa thị trấn 2 và 4 với chi phí 2
  • Tuyến đường giữa thị trấn 3 và 4 với chi phí 1
  • Tuyến đường giữa thị trấn 2 và 5 với chi phí 1
  • Tuyến đường giữa thị trấn 1 và 5 với chi phí 1

Tổng chi phí sẽ là: 2 + 1 + 1 + 1 = 5. Đây là cách xây dựng tối ưu nhất.

Giới hạn

Subtask 1 (20 điểm)

  • ~n~ ≤ 103

Subtask 2 (30 điểm)

  • Không có giới hạn gì thêm

Nguồn: Free Contest


Comments

Please read the guidelines before commenting.


There are no comments at the moment.