trang chủ / bài tập / frndedtg / lời giải

Chỉnh Sửa Tình Bạn

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Chỉnh Sửa Tình Bạn

Hướng tiếp cận

Quy hoạch động trên bitmask, phân hoạch đỉnh thành các clique.

Nhận xét quan trọng

Tính chất yêu cầu tương đương với: trong đồ thị phần bù, nếu không có cạnh giữa (A,B)(B,C), thì không thể có cạnh (A,C). Điều này có nghĩa mỗi thành phần liên thông trong đồ thị thỏa mãn phải là một clique (đồ thị đầy đủ).

Do đó, bài toán quy về: phân hoạch N đỉnh thành các clique sao cho tổng số cạnh cần thêm/xóa là nhỏ nhất.

Thuật toán

  1. Tiền xử lý: Với mỗi tập con S (bitmask), tính flip[S] = số cạnh cần thay đổi nếu S thành clique.

  2. DP: dp[mask] = chi phí tối thiểu để phân hoạch các đỉnh trong mask thành các clique.

    • Chuyển trạng thái: dp[mask]=minSmask(dp[maskS]+flip[S])
  3. Duyệt tất cả tập con của mask bằng kỹ thuật subset enumeration.

Độ phức tạp

  • Thời gian: O(3N+N2·2N)
  • Bộ nhớ: O(2N)

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