Đếm số đường đi

Đề bài

Mô tả

Cho một đồ thị có hướng G gồm n đỉnh, đánh số từ 1 đến n. Đồ thị có thể chứa vòng lặp (cạnh đi từ một đỉnh tới chính nó) nhưng không có cạnh bội — với mọi cặp đỉnh có thứ tự (u,v), có nhiều nhất một cạnh từ u tới v.

Một đường đi từ u tới v là một dãy cạnh sao cho:

  • Đỉnh u là đầu của cạnh đầu tiên;
  • Đỉnh v là cuối của cạnh cuối cùng;
  • Với mọi hai cạnh liền nhau, cạnh sau xuất phát từ đỉnh mà cạnh trước kết thúc.

Quy ước rằng dãy cạnh rỗng cũng là một đường đi từ u tới u.

Với mỗi đỉnh v, hãy in ra một trong bốn giá trị:

  • 0 — nếu không có đường đi nào từ 1 tới v;
  • 1 — nếu có đúng một đường đi từ 1 tới v;
  • 2 — nếu số đường đi từ 1 tới v là hữu hạn và lớn hơn 1;
  • 1 — nếu số đường đi từ 1 tới v là vô hạn.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1t104) — số bộ test.
  • Trước mỗi bộ test có một dòng trống.
  • Dòng đầu của mỗi bộ test chứa hai số nguyên nm (1n4·105, 0m4·105) — số đỉnh và số cạnh.
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên ai,bi (1ai,bin) — cạnh có hướng từ ai tới bi.

Tổng n qua tất cả bộ test không vượt quá 4·105. Tổng m qua tất cả bộ test không vượt quá 4·105.

Dữ liệu ra

Với mỗi bộ test, in ra một dòng chứa n số nguyên, mỗi số thuộc tập {1,0,1,2} — đáp án cho từng đỉnh từ 1 tới n.

Ràng buộc

  • 1t104
  • 1n,m4·105 (theo nghĩa 1n0m, với tổng giới hạn 4·105 mỗi loại)
  • Đồ thị có thể chứa vòng lặp, nhưng không có cạnh bội.

Ví dụ

Input Output Giải thích
5

6 7
1 4
1 3
3 4
4 5
2 1
5 5
5 6

1 0

3 3
1 2
2 3
3 1

5 0

4 4
1 2
2 3
1 4
4 3
1 0 1 2 -1 -1
1
-1 -1 -1
1 0 0 0 0
1 1 2 1
Bộ test 1: tới đỉnh 1 chỉ có đường đi rỗng; đỉnh 2 không tới được; đỉnh 4 có hai đường [(1,3),(3,4)][(1,4)]; đỉnh 5 có vòng lặp 55 nên số đường đi vô hạn; đỉnh 6 kéo theo cũng vô hạn.
Bộ test 3: cả ba đỉnh nằm trên cùng một chu trình chứa đỉnh 1, nên có vô hạn đường đi tới mỗi đỉnh.
Bộ test 5: tới đỉnh 3 có hai đường khác nhau qua 2 và qua 4.
1

1 1
1 1
-1 Đỉnh 1 có vòng lặp tự nó, do đó có vô hạn đường đi (đi qua vòng lặp tùy ý lần).

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