Kết Nối Động

Đề bài

Mô tả

Cho một đồ thị vô hướng có N đỉnh với M cạnh ban đầu. Sau đó có K thao tác, mỗi thao tác là một trong hai loại:

  • Thêm cạnh: Thêm cạnh (u,v) vào đồ thị.
  • Xóa cạnh: Xóa cạnh (u,v) khỏi đồ thị.

Sau mỗi trạng thái (trạng thái ban đầu và sau mỗi thao tác), hãy in số thành phần liên thông của đồ thị.

Dữ liệu vào

Dòng đầu tiên chứa ba số nguyên N, M, K — số đỉnh, số cạnh ban đầu, và số thao tác.

  • M dòng tiếp theo, mỗi dòng chứa hai số nguyên u, v — mô tả một cạnh ban đầu.

  • K dòng tiếp theo, mỗi dòng mô tả một thao tác:

  • 1 u v — thêm cạnh (u,v).
  • 2 u v — xóa cạnh (u,v) (đảm bảo cạnh này đang tồn tại trong đồ thị).

Dữ liệu ra

In K+1 số nguyên trên một dòng, cách nhau bởi dấu cách: số thành phần liên thông sau trạng thái ban đầu và sau mỗi thao tác.

Ràng buộc

  • 1N105
  • 0M105
  • 1K105
  • 1u,vN, uv
  • Có thể có nhiều cạnh song song (multi-edge) tại một thời điểm.

Ví dụ

Input Output Giải thích
3 0 3
1 1 2
1 2 3
2 1 2
3 2 1 2 Ban đầu không có cạnh: 3 thành phần.
Thêm (1,2): {1,2}, {3} → 2 thành phần.
Thêm (2,3): {1,2,3} → 1 thành phần.
Xóa (1,2): {1}, {2,3} → 2 thành phần.
4 2 3
1 2
3 4
2 1 2
1 2 3
1 1 4
2 3 2 1 Ban đầu có cạnh (1,2),(3,4): {1,2},{3,4} → 2 thành phần.
Xóa (1,2): {1},{2},{3,4} → 3 thành phần.
Thêm (2,3): {1},{2,3,4} → 2 thành phần.
Thêm (1,4): {1,2,3,4} → 1 thành phần.

Ghi chú

Đồ thị có thể có nhiều cạnh song song giữa cùng hai đỉnh. Khi xóa cạnh, chỉ xóa một bản sao.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0