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

Liên Minh

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: Liên Minh

Hướng tiếp cận

Phân tích theo từng thành phần liên thông. Với mỗi thành phần có V đỉnh và E cạnh, số cách gán hợp lệ phụ thuộc vào quan hệ giữa VE. Nhân kết quả tất cả thành phần lại với nhau (modulo 109+7).

Nhận xét quan trọng

  1. Với M<N, tổng số cạnh nhỏ hơn số đỉnh. Mỗi thành phần liên thông chỉ có thể là:
    • Cây (E=V1): có đúng V cách gán hợp lệ (mỗi cạnh trong cây có thể là "cạnh gốc" để gán các đỉnh).
    • Unicyclic (E=V, đúng một chu trình): có đúng 2 cách gán hợp lệ.
    • E>V: không thể xảy ra vì M<N nên EV1 cho hầu hết thành phần. Nhưng nếu xảy ra: trả về 0.
  2. Đỉnh cô lập (E=0,V=1): là trường hợp đặc biệt của cây với V=1, nhưng không có cạnh kề để gán, nên không có cách gán — kết quả là 0.

Thuật toán

  1. Đọc đồ thị N đỉnh M cạnh (vô hướng).
  2. Với mỗi đỉnh chưa thăm, DFS để tính V (số đỉnh) và E (số cạnh, chia 2 vì mỗi cạnh đếm 2 lần) của thành phần liên thông.
  3. Phân tích thành phần:
    • Nếu E>V: in 0 và kết thúc.
    • Nếu E=V1 (cây): nhân đáp án với V.
    • Nếu E=V (unicyclic): nhân đáp án với 2.
    • Nếu E<V1 (có đỉnh cô lập): in 0 và kết thúc.
  4. In đáp án modulo 109+7.

Độ phức tạp

  • Thời gian: O(N+M)
  • Bộ nhớ: O(N+M)

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