Sửa cầu

Xem dạng PDF

Gửi bài giải


Điểm: 0,39 (OI)
Giới hạn thời gian: 0.6s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Vì lo lắng Pirate sẽ buồn chán khi một thân một mình ở đảo hoang, bạn gái Pirate từ trong đất liền dự định sang chơi với anh ấy.

Pirate đang sinh sống trên một quần đảo gồm ~N~ đảo. Vì các đảo khá gần nhau nên chẳng cần thuyền bè gì, Pirate chỉ cần đốn đại cây dừa nào đó và bắc ngang là có thể đi được từ đảo này sang đảo khác. Vì không muốn hủy hoại môi trường nên anh ấy chỉ đốn ~N~ - ~1~ cây dừa làm cầu, vừa đủ để từ một đảo bất kì đi đến được hết mọi đảo còn lại.

Nhưng mà "Môi son, má đào, chân guốc cao gót làm sao em qua cầu dừa??? ". Lo lắng sợ bạn gái sẽ rơi xuống biển và bị cá đuối nẫng mất, Pirate hộc tốc đi sửa chữa các cây cầu dừa. Anh đưa ra một lịch trình như sau: vào mỗi ngày sẽ đi kiểm tra mọi cây cầu trên đường đi từ đảo ~a~ đến đảo ~b~.

Tuy nhiên, lịch trình đó khá là phi khoa học. Thực hiện, xong rồi, Pirate mới ngớ ra là không biết mình có bỏ sót cây cầu nào không?

Input

  • Dòng thứ nhất: số nguyên ~N~ - số hòn đảo.
  • ~N~ - ~1~ dòng tiếp theo: mỗi dòng gồm hai số nguyên ~a~ và ~b~ - có một cây cầu dừa nối đảo ~a~ và đảo ~b~.
  • Dòng thứ ~N~ + ~1~: số nguyên ~M~ - số ngày kiểm tra.
  • ~M~ dòng tiếp theo: mỗi dòng gồm hai số nguyên ~a~ và ~b~ - ngày hôm đó, Pirate sẽ kiểm tra các cây cầu trên đoạn đường từ đảo ~a~ đến đảo ~b~.

Output

  • Một số nguyên duy nhất thể hiện số cây cầu chưa được kiểm tra.

Giới hạn

  • ~1 \leq N~, ~M \leq 200000~
  • ~60\%~ số test có ~1 \leq N~, ~M \leq 5000~
  • ~80\%~ số test có ~1 \leq N~, ~M \leq 50000~

Sample Input

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

Sample Output

1

Note

Ngày thứ nhất, Pirate kiểm tra các cây cầu (~2~, ~3~), (~2~, ~4~) và (~4~, ~6~). Ngày thứ hai, anh kiểm tra các cây cầu (~5~, ~4~) và (~4~, ~6~). Cây cầu duy nhất chưa được kiểm tra là (~1~, ~2~).


Bình luận

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



  • -5
    phatdu12345  đã bình luận lúc 7, Tháng 8, 2025, 8:16

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -1
    tranminhphuong3579  đã bình luận lúc 5, Tháng 8, 2025, 4:28

    Bài này có thể sol bằng hld, nhưng code sẽ phức tạp hơn

    Vì đây là cây nên chỉ tồn tại duy nhất một đường đi từ u -> v. Với mỗi một đường đi từ u -> v, ta cần đánh dấu lại các cạnh mà ta đã đi qua. Kết quả cuối cùng là (n - 1) cạnh trừ đi tổng số cạnh mà ta đã đi qua. Ta có thể đi từ u -> v với độ phức tạp log2(n) cho mỗi bước đi bằng heavy-light decomposition và sử dụng thêm cấu trúc dữ liệu cây IT hoặc BIT để đánh dấu các con đường mình đã đi qua -> độ phức tạp O((n + m) * log2(n))


  • 2
    Groot  đã bình luận lúc 20, Tháng 7, 2025, 16:56

    Với những bạn làm theo hướng giải như VNOI WIKI -- "cạnh thêm vào có thể đã có sẵn trong đồ thị. Khi đó, ta cần tìm cạnh cầu trong một đa đồ thị, ta sẽ phải đánh dấu nếu cạnh đó đã sử dụng" -- VNOI WIKI - Depth First Search Tree

    Mình xin mạo muội gợi ý cách nén mới :v (tuy không hiệu quả bằng lời giải chuẩn nhưng đơn giản/dơ hơn)

    Có thể nén: id(u, v) = min(u,v) * 2e5 + max(u,v) lưu vào hashmap (tạm gọi: edge_cnt).
    Sau đó kiểm tra cầu của đồ thị, nếu edge_cnt[id(u,v)] == 1 thì là cầu.


  • -5
    Huy_inIT  đã bình luận lúc 12, Tháng 8, 2024, 5:56

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    nhatday1  đã bình luận lúc 21, Tháng 12, 2023, 8:04

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    tiend4568  đã bình luận lúc 16, Tháng 12, 2023, 9:16

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -10
    le_hieu  đã bình luận lúc 19, Tháng 10, 2023, 0:03 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -16
    Khoipu  đã bình luận lúc 26, Tháng 9, 2023, 4:04 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -9
    nhy  đã bình luận lúc 22, Tháng 9, 2023, 5:41

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -12
      tminh_hk20  đã bình luận lúc 22, Tháng 9, 2023, 6:30

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 10
    leduykhongngu  đã bình luận lúc 18, Tháng 12, 2021, 6:55 chỉnh sửa

    Bộ test bài tập này đã được cập nhật thêm 1 test. Cảm ơn bạn _Neos_ đã đóng góp test. Số lượng AC giảm từ 133 xuống còn 88