canuc80k7601·2/50

Tuyến Đường Bắt Buộc Dài Nhất

Nộp bài trên LQDOJ

Bài 76 · Advanced Trees

Một bản đồ gồm địa điểm và lối đi hai chiều. Bản đồ liên thông, không có khuyên và không có hai lối đi nối cùng một cặp địa điểm.

Sau khi chọn hai địa điểm khác nhau và , một lối đi được gọi là bắt buộc khi mọi hành trình từ tới đều phải đi qua lối đi đó. Hãy chọn và sao cho số lối đi bắt buộc là lớn nhất.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Mỗi trong dòng tiếp theo chứa hai số , mô tả một lối đi hai chiều giữa hai địa điểm.

Output

  • In một số nguyên: số lối đi bắt buộc lớn nhất có thể đạt được.

Constraints

  • .
  • .
  • .
  • Đồ thị đơn và liên thông.

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

8 9
1 2
2 3
3 1
3 4
4 5
5 6
6 7
7 5
7 8

Output

3

Giải thích: Các tam giác cho phép đi vòng nên không lối đi nào bên trong chúng là bắt buộc. Ba lối và tạo thành chuỗi ngăn cách dài nhất giữa hai vùng, nên đáp án là .

Lời giải tóm tắt
  • Ý tưởng: Tìm tất cả cầu bằng low-link, rồi co mỗi thành phần nối được với nhau mà không đi qua cầu thành một đỉnh. Vì đồ thị ban đầu liên thông, các đỉnh co và các cầu tạo thành một cây. Với hai địa điểm bất kỳ, số lối đi bắt buộc đúng bằng số cạnh trên đường giữa hai đỉnh co tương ứng; do đó đáp án là đường kính của cây này.
  • Đúng đắn: Mỗi cạnh không phải cầu có thể được tránh nhờ một đường thay thế, nên nó không thể bắt buộc cho một cặp địa điểm. Mỗi cầu trên đường duy nhất giữa hai thành phần co tách hai đầu đường khi bị xóa, nên mọi hành trình giữa chúng phải sử dụng cầu ấy. Vì vậy số lối đi bắt buộc cho một cặp bằng khoảng cách trong cây co, và khoảng cách lớn nhất chính là đường kính.
  • Độ phức tạp: O(n+m) thời gian và O(n+m) bộ nhớ.