CITYWAY - Đường thành phố

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Ở đất nước Navi, có ~N~ thành phố, được đánh số từ ~1~ tới ~N~, và ~M~ con đường cũng được đánh số từ ~1~ tới ~M~. Con đường thứ ~i~ sẽ kết nối 2 thành phố ~A_i~ và ~B_i~.

S1mple có thể thực hiện thao tác sau không hoặc nhiều lần:

  • Chọn hai thành phố riêng biệt không được kết nối trực tiếp từ 1 con đường và xây dựng một con đường mới giữa 2 thành phố.

Sau khi S1mple kết thúc tất cả hoạt động, phải có thể đi từ bất kỳ thành phố nào đến bất kỳ thành phố nào khác bằng cách đi theo các con đường (có thể nhiều lần).

Vậy số con đường tối thiểu để S1mple đạt được mục tiêu là bao nhiêu

Input

  • Gồm ~M + 1~ dòng.

  • Dòng đầu tiên nhập 2 số ~N~ và ~M~ được phân tách nhau bởi dấu cách, lần lượt là số thành phố và số con đường giữa 2 thành phố.

  • ~M~ dòng tiếp theo nhập 2 số ~A_i~ và ~B_i~ được phân tách nhau bởi dấu cách, biểu diễn 2 con đường kết nối từ 2 thành phố ~A_i~ và ~B_i~.

  • ~2 \leq N \leq 10^5~

  • ~1 \leq M \leq 10^5~

  • ~1 \leq A_i < B_i \leq N~

Output

  • Một dòng duy nhất là số con đường tối thiểu để S1mple đạt đươc mục tiêu.

Sample

Input #1
3 1
1 2
Output #1
1

Hint

Giải thích Test #1:

Ban đầu có ba thành phố và có một con đường giữa Thành phố ~1~ và Thành phố ~2~.

S1mple có thể đạt được mục tiêu của mình bằng cách xây dựng một con đường mới chẳng hạn như  giữa Thành phố ~1~ và Thành phố ~3~, và sau đó:

  • Chúng ta có thể đi giữa Thành phố ~1~ và Thành phố ~2~ một cách trực tiếp.

  • Chúng ta có thể đi giữa Thành phố ~1~ và Thành phố ~3~ một cách trực tiếp.

  • Và chúng ta cũng có thể đi giữa Thành phố ~2~ và Thành phố ~3~ thông qua con đường (~2~ - ~1~ - ~3~).


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 1
    vudinhlong  đã bình luận lúc 14, Tháng 10, 2024, 14:33

    Đề ra lắt léo quá chòi ^.^