trang chủ / đề bài / iceskate

Trượt băng

Đề bài

Mô tả

Trên một mặt băng phẳng có n đống tuyết, đống thứ i nằm tại tọa độ nguyên (xi,yi). Tất cả các đống tuyết đều ở những vị trí đôi một khác nhau.

Một người trượt băng chỉ có thể di chuyển bằng cách đứng tại một đống tuyết, đạp chân theo một trong bốn hướng (bắc, nam, đông, tây) rồi trượt cho tới khi va vào một đống tuyết khác và dừng lại ở đó. Hướng bắc trùng với chiều dương trục Oy, hướng đông trùng với chiều dương trục Ox.

Nói cách khác, từ đống tuyết (xi,yi) chỉ có thể trượt tới đống tuyết (xj,yj) khi hai đống nằm cùng một hàng ngang (yi=yj) hoặc cùng một cột dọc (xi=xj). Nếu trên đoạn thẳng nối hai đống còn có đống tuyết khác thì người trượt sẽ dừng ở đống gần hơn, nhưng từ đó lại đi tiếp được, nên khả năng di chuyển giữa hai đống cùng hàng hoặc cùng cột không thay đổi.

Với cách di chuyển như vậy, có thể tồn tại những cặp đống tuyết không thể đi từ đống này tới đống kia. Hãy đắp thêm một số đống tuyết mới (cũng tại các tọa độ nguyên, tùy ý chọn) sao cho từ một đống tuyết bất kỳ đều có thể tới được mọi đống tuyết khác. Tìm số đống tuyết ít nhất cần đắp thêm.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số đống tuyết ban đầu.
  • n dòng tiếp theo, dòng thứ i chứa hai số nguyên xi và yi là tọa độ của đống tuyết thứ i.

Dữ liệu ra

Một số nguyên duy nhất là số đống tuyết ít nhất cần đắp thêm.

Ràng buộc

  • 1≤n≤100
  • 1≤xi,yi≤1000
  • Các vị trí (xi,yi) đôi một khác nhau.

Ví dụ

Input Output Giải thích
2
2 1
1 2
1 Hai đống (2,1) và (1,2) khác cả hoành độ lẫn tung độ nên không tới được nhau. Đắp thêm một đống tại (1,1) (hoặc (2,2)) là đủ: từ (2,1) trượt sang (1,1) theo hướng tây, rồi từ (1,1) trượt lên (1,2) theo hướng bắc.
2
2 1
4 1
0 Hai đống cùng tung độ y=1 nên đã đi lại được giữa chúng, không cần đắp thêm.
3
1 1
1 2
2 2
0 (1,1) và (1,2) cùng hoành độ, (1,2) và (2,2) cùng tung độ, nên cả ba đống đã liên thông.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0