trang chủ / bài tập / dirroads

Đảo chiều đường

Đề bài

Mô tả

Cho một đất nước có n thị trấn được đánh số từ 1 đến n và đúng n con đường một chiều. Con đường thứ i đi từ thị trấn i đến thị trấn ai (với aii).

Bạn được phép chọn một tập con bất kỳ trong các con đường rồi đảo chiều mỗi con đường trong tập đó đúng một lần (con đường AB trở thành BA).

Mạng đường được gọi là rối nếu sau khi đảo chiều tồn tại một dãy các thị trấn phân biệt A1,A2,,Ak (k>1) sao cho có đường từ Ai đến Ai+1 với mọi 1i<k và có đường từ Ak về A1 — nói cách khác, mạng có chứa một chu trình có hướng.

Hãy đếm số tập con của các con đường (trong tổng cộng 2n tập con) mà sau khi đảo chiều mỗi con đường trong tập đó, mạng đường thu được không bị rối. In ra kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng thứ nhất chứa số nguyên n — số thị trấn.
  • Dòng thứ hai chứa n số nguyên a1,a2,,anai là đích đến của con đường xuất phát từ thị trấn i.

Dữ liệu ra

In ra một số nguyên duy nhất là số tập con cần đếm, lấy modulo 109+7.

Ràng buộc

  • 2n2·105
  • 1ain, aii

Ví dụ

Input Output Giải thích
3
2 3 1
6 Đồ thị ban đầu gồm chu trình 1231. Cần đảo ít nhất một và nhiều nhất hai con đường để phá chu trình, cho (31)+(32)=6 tập.
4
2 1 1 1
8 Chu trình duy nhất là 12 (độ dài 2). Để phá chu trình, đúng một trong hai cạnh của nó phải được đảo: 2 cách. Hai cạnh 3141 có thể tuỳ ý: 22=4. Tổng cộng 2·4=8.
5
2 4 2 5 3
28 Chu trình 24532 độ dài 4242=14 cách đảo hợp lệ. Con đường 12 ngoài chu trình tự do với 2 cách. Đáp số 14·2=28.

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