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

Trò chơi với hai cây

Đề bài

Mô tả

Ta xét hai cây có gốc. Ban đầu mỗi cây chỉ gồm đúng một đỉnh mang số hiệu 1, chính là gốc của cây đó. Mỗi cạnh của cây được gắn một chữ cái Latin thường.

Với một cây, dãy đỉnh v1,v2,,vk (k1) được gọi là đường đi xuôi nếu với mọi i từ 1 đến k1, đỉnh vi là cha trực tiếp của đỉnh vi+1. Viết lần lượt các chữ cái trên các cạnh của đường đi này theo thứ tự từ v1 đến vk, ta được một xâu tương ứng với đường đi xuôi đó (khi k=1 xâu này rỗng).

Tương tự, dãy đỉnh v1,v2,,vk (k1) được gọi là đường đi ngược nếu với mọi i từ 1 đến k1, đỉnh vi là con trực tiếp của đỉnh vi+1. Xâu tương ứng cũng được viết theo thứ tự từ v1 đến vk (khi k=1 xâu này rỗng).

Cho n thao tác, mỗi thao tác gồm ba giá trị (t,v,c):

  • t là chỉ số cây được thao tác (1 hoặc 2);
  • v là số hiệu một đỉnh đang có trong cây đó;
  • c là một chữ cái Latin thường.

Thao tác này thêm vào cây t một đỉnh mới mang số hiệu m+1, trong đó m là số đỉnh hiện tại của cây t, và nối đỉnh v với đỉnh mới bằng một cạnh mang chữ cái c. Như vậy đỉnh mới là con trực tiếp của v.

Bộ ba số nguyên có thứ tự (i,j,q) được gọi là một bộ ba đẹp nếu:

  • 1im1, với m1 là số đỉnh hiện tại của cây thứ nhất;
  • 1j,qm2, với m2 là số đỉnh hiện tại của cây thứ hai;
  • trong cây thứ hai tồn tại đường đi xuôi v1,v2,,vk với v1=jvk=q;
  • xâu tương ứng với đường đi xuôi từ j đến q trong cây thứ hai bằng đúng xâu tương ứng với đường đi ngược từ đỉnh i về đỉnh 1 trong cây thứ nhất.

Cả hai đường đi nói trên, nếu tồn tại, đều là duy nhất. Lưu ý rằng j=q được chấp nhận và khi đó xâu tương ứng là xâu rỗng.

Hãy tính số bộ ba đẹp sau mỗi thao tác.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số thao tác.
  • n dòng tiếp theo, mỗi dòng chứa một thao tác dưới dạng t v c, theo đúng thứ tự thực hiện.

Dữ liệu ra

In ra đúng n dòng, dòng thứ x chứa một số nguyên là số bộ ba đẹp sau khi thực hiện thao tác thứ x.

Ràng buộc

  • 1n700
  • t{1,2}
  • 1v số đỉnh hiện tại của cây t
  • c là chữ cái Latin thường

Ví dụ

Input Output Giải thích
1
2 1 z
2 Cây thứ hai có thêm đỉnh 2. Hai bộ ba đẹp là (1,1,1)(1,2,2): đỉnh i=1 cho xâu rỗng, và j=q cũng cho xâu rỗng.
2
1 1 o
2 1 o
1
3
Sau thao tác đầu chỉ có (1,1,1). Sau thao tác thứ hai xuất hiện thêm (2,1,2) (cùng xâu o) và (1,2,2) (xâu rỗng).
5
1 1 a
2 1 a
1 2 b
2 1 b
2 3 a
1
3
3
4
7
Thao tác thứ ba không tạo thêm bộ ba nào. Thao tác cuối tạo thêm ba bộ ba (1,4,4), (2,3,4)(3,1,4): xâu ngược từ đỉnh 3 của cây thứ nhất là ba, trùng với xâu xuôi từ đỉnh 1 đến đỉnh 4 của cây thứ hai.

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