VOI 15 Bài 3 - Kế hoạch cải tổ

View as PDF

Submit solution

Points: 0.63 (partial)
Time limit: 1.0s
Memory limit: 512M
Input: stdin
Output: stdout

Problem source:
VOI15 day 1
Problem type
Allowed languages
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Mạng giao thông của thành phố NB có ~n~ nút giao thông và ~m~ đoạn đường phố hai chiều nối các nút giao thông. Các nút giao thông được đánh số từ ~1~ đến ~n~. Các đoạn đường phố được đánh số từ ~1~ đến ~m~. Mạng giao thông của thành phố có tính chất sau đây:

  • Giữa hai nút giao thông bất kỳ có không quá một đoạn đường phố nối chúng;
  • Không có đoạn đường phố nào nối một nút giao thông với chính nó.

Vấn đề giao thông là thách thức với chính quyền thành phố từ nhiều năm. Với mong muốn đảm bảo việc đi lại thuận lợi hơn cho người dân, chính quyền thành phố quyết định tiến hành cải tổ mạng giao thông, trước hết nhằm đảm bảo có thể đi từ một nút giao thông bất kỳ đến tất cả các nút còn lại. (Lưu ý là mạng giao thông trước khi cải tổ có thể không đảm bảo yêu cầu này). Tuy nhiên, do hạn hẹp về nguồn kinh phí, trước mắt kế hoạch cải tổ chỉ có thể bao gồm ~2~ công việc:

  • Loại bỏ một đoạn đường phố hiện có khỏi mạng giao thông;
  • Xây dựng một đoạn đường chưa từng có trước đó nối hai nút giao thông khác nhau.

Đồng thời, sau khi thực hiện cải tổ, mạng giao thông phải đảm bảo có thể đi từ một nút giao thông bất kỳ đến tất cả các nút còn lại.

Yêu cầu: Giúp chính quyền thành phố xác định xem có bao nhiêu cách khác nhau để thực hiện kế hoạch cải tổ thỏa mãn các yêu cầu đặt ra. (Hai kế hoạch cải tổ là khác nhau nếu có ít nhất một trong hai đoạn đường được lựa chọn loại bỏ hay xây dựng mới là khác nhau.)

Hình vẽ minh họa: (VÍ DỤ ~1~)

image

Hình vẽ minh họa: (VÍ DỤ ~2~)

image

Input

  • Dòng đầu tiên chứa hai số nguyên ~n~ và ~m~ (~m \leq 10^{5}~, ~n \leq 2 \times 10^{5}~)
  • Dòng thứ ~i~ trong số ~m~ dòng tiếp theo chứa hai số nguyên ~u_i~ và ~v_i~ (~1 \leq u_{i}~, ~v _i \leq n~, ~u _i \neq v_i~) là chỉ số của hai nút giao thông được nối bởi đoạn đường ~i~ (~i = 1, 2, \dots, m~).

Hai số liên tiếp trên cùng dòng được ghi cách nhau bởi dấu cách.

Output

  • Ghi ra một số nguyên là số cách thực hiện kế hoạch cải tổ mạng giao thông thỏa mãn các yêu cầu đặt ra.

Sample Input 1

4 4
1 2
2 3
2 4
3 4

Sample Output 1

8

Sample Input 2

7 5
1 2
3 4
5 6
5 7
6 7

Sample Output 2

0

Comments

Please read the guidelines before commenting.



  • 11
    PPAP_1264589   commented on June 29, 2021, 1:32 a.m.

    Trong trường hợp có đúng 2 TPLT, đầu tiên chúng ta cần đếm được số cách nối giữa hai TPLT bằng cách for cùng DFS

        up(i, 1, n){
            if (!num[i]){
                DFS(i);
                break; // Duyệt qua đúng 1 TPLT
            }
        }
        result = (timeDfs * (n - timeDfs));
    

    Sau đó DFS một lần nữa qua tất cả các TPLT để tìm được số cầu

        up(i, 1, n){
            if (!num[i]){
                DFS(i);
            }
        }
        return result * (m - số cầu);
    

    Nhiều bạn ngộ nhận số cầu của cả đồ thị khi chưa duyệt qua cả 2 TPLT nên dẫn đến sai test 9-14 và 32-45


  • -6
    MrMinhFly   commented on June 22, 2021, 9:56 p.m. edit 6

    This comment is hidden due to too much negative feedback. Show it anyway.