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

Đếm đồ thị có hướng

Đề bài

Mô tả

Cho một đồ thị có hướng, không trọng số gồm n đỉnh được đánh số từ 1 đến nm cung. Mọi cung của đồ thị đều đi từ đỉnh v tới đỉnh u với v<u.

Hãy đếm số cách thêm vào đồ thị một số lượng tuỳ ý (có thể bằng 0) cung sao cho đồ thị thu được thoả mãn đồng thời các điều kiện sau:

  1. Từ đỉnh i bất kỳ (i<n) đều đi đến được tất cả các đỉnh i+1,i+2,,n.
  2. Mọi cung đi từ đỉnh v tới đỉnh u đều thoả v<u.
  3. Giữa hai đỉnh bất kỳ có nhiều nhất một cung.
  4. Với mọi cặp đỉnh i,j (i<j) mà jik, đường đi ngắn nhất từ i đến j gồm đúng ji cung.
  5. Với mọi cặp đỉnh i,j (i<j) mà ji>k, đường đi ngắn nhất từ i đến j gồm ji cung hoặc jik cung.

Hai cách thêm cung được coi là khác nhau nếu tồn tại cặp đỉnh i,j (i<j) mà đồ thị thu được theo cách thứ nhất có cung từ i đến j, còn đồ thị thu được theo cách thứ hai thì không.

Kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên n, m, k.
  • m dòng tiếp theo, dòng thứ i chứa hai số nguyên ui, vi mô tả một cung có hướng đi từ đỉnh ui tới đỉnh vi trong đồ thị ban đầu.

Dữ liệu bảo đảm giữa mỗi cặp đỉnh ui,vi có nhiều nhất một cung, các cung được cho theo thứ tự ui không giảm, và với cùng một ui thì các cung được cho theo thứ tự vi tăng dần.

Dữ liệu ra

In ra một số nguyên duy nhất là số cách thêm cung, lấy phần dư khi chia cho 109+7.

Ràng buộc

  • 2n106
  • 0m105
  • 1k106
  • 1ui<vin

Ví dụ

Input Output Giải thích
7 8 2
1 2
2 3
3 4
3 6
4 5
4 7
5 6
6 7
2 Có hai cách: không thêm gì, hoặc thêm đúng một cung từ đỉnh 2 tới đỉnh 5.
7 0 2 12 Đồ thị ban đầu rỗng nên mọi cung đều phải được thêm vào.
7 2 1
1 3
3 5
0 Với k=1, đi theo 135 cho đường đi độ dài 2, trong khi 51k=351=4. Không cách thêm cung nào cứu được điều kiện 5.
7 1 3
1 5
4 Ngoài cung 15 đã có, mỗi cung trong hai cung 2637 có thể có hoặc không, cho 22=4 cách.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0