Lexicographically Smallest Path

Đề bài

Mô tả

Cho đồ thị vô hướng liên thông gồm N đỉnh và M cạnh. Mỗi cạnh được gán một ký tự viết thường từ 'a' đến 'z'. Đồ thị có thể chứa khuyên (cạnh nối một đỉnh với chính nó) và đa cạnh.

Một hành trình từ đỉnh a đến đỉnh b là một dãy cạnh nối tiếp nhau đi từ a tới b, trong đó được phép đi lại một đỉnh hoặc một cạnh nhiều lần. Ghép các ký tự trên các cạnh theo đúng thứ tự đi qua, ta được xâu ký tự của hành trình đó (hành trình rỗng cho xâu rỗng).

Gọi f(a,b) là xâu nhỏ nhất theo thứ tự từ điển trong tất cả các xâu của mọi hành trình từ a đến b. Lưu ý rằng số hành trình là vô hạn, nên xâu nhỏ nhất có thể không tồn tại: khi đó với mọi hành trình đều tìm được hành trình khác cho xâu nhỏ hơn thật sự.

Với mỗi đỉnh i (1iN), hãy xác định độ dài của f(1,i). In 1 nếu f(1,i) không tồn tại.

Nhắc lại thứ tự từ điển: xâu x nhỏ hơn xâu y nếu x là tiền tố thật sự của y, hoặc tại vị trí khác nhau đầu tiên ký tự của x nhỏ hơn ký tự của y.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên T (1T10) - số test case.
  • Với mỗi test case:
    • Dòng 1: Hai số nguyên NM (1N2×105, N1M2×105).
    • M dòng tiếp theo: Mỗi dòng chứa hai số nguyên u,v và một ký tự c viết thường - biểu thị cạnh nối uv với nhãn c.

Tổng N và tổng M trên tất cả test case đều không vượt quá 4×105.

Dữ liệu ra

Với mỗi test case, in N số nguyên cách nhau bởi dấu cách, số thứ i là độ dài f(1,i) hoặc 1 nếu f(1,i) không tồn tại.

Ràng buộc

  • 1T10
  • 1N2×105
  • N1M2×105
  • Tổng N4×105, tổng M4×105

Ví dụ

Input Output Giải thích
2
1 0
2 2
1 1 a
2 1 b
0
0 -1
Test case 1: chỉ 1 đỉnh, f(1,1) = xâu rỗng, dài 0. Test case 2: đỉnh 1 có khuyên nhãn 'a', cạnh 1-2 nhãn 'b'. Mọi hành trình tới đỉnh 2 đều kết thúc bằng 'b', nhưng đi thêm một vòng khuyên 'a' trước đó luôn cho xâu nhỏ hơn ("ab" < "b", "aab" < "ab", ...), nên f(1,2) không tồn tại.
2
7 7
1 2 a
1 3 a
2 4 b
3 5 a
5 6 a
6 7 a
7 4 a
4 3
1 2 z
2 3 x
3 4 y
0 1 1 5 2 3 4
0 1 2 -1
Test case 1: f(1,4) = "aaaaa" (dài 5), đi 1->3->5->6->7->4; xâu này nhỏ hơn "ab" của hành trình ngắn hơn 1->2->4. Test case 2: f(1,3) = "zx", còn tới đỉnh 4 thì đi qua lại cạnh 2-3 nhãn 'x' nhiều lần luôn cho xâu nhỏ hơn ("zxxy" < "zxy"), nên đáp án là -1.

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