Quản lý phụ thuộc

Đề bài

Mô tả

Một hệ thống quản lý thư viện coi mỗi dự án là một project. Mỗi project được xác định bởi tên (một xâu khác rỗng gồm các chữ cái latin thường, độ dài không quá 10) và phiên bản (số nguyên dương từ 1 đến 106). Hai project được xem là khác nhau nếu khác nhau ở tên hoặc ở phiên bản.

Mỗi project có thể phụ thuộc (trực tiếp) vào một số project khác. Đảm bảo không có phụ thuộc vòng.

Cho danh sách mô tả n project. Project đầu tiên trong danh sách là project của bạn. Hãy xác định tất cả các project mà project của bạn phụ thuộc vào (trực tiếp hoặc gián tiếp qua một chuỗi phụ thuộc).

Có thể project của bạn phụ thuộc vào hai phiên bản khác nhau của cùng một tên project. Khi đó áp dụng giải quyết xung đột như sau: với mỗi tên, hệ thống chọn phiên bản có khoảng cách nhỏ nhất tới project của bạn (khoảng cách là số cạnh trên chuỗi phụ thuộc). Nếu có nhiều phiên bản cùng khoảng cách nhỏ nhất thì chọn phiên bản mới nhất (số phiên bản lớn nhất). Phiên bản được chọn này được xem là phiên bản hiệu lực; các phiên bản khác của cùng tên đó, cùng toàn bộ phụ thuộc của chúng, bị bỏ qua.

Chính xác hơn, khoảng cách chỉ được tính dọc theo các phụ thuộc của những phiên bản hiệu lực: chỉ phụ thuộc của một phiên bản hiệu lực mới tiếp tục lan truyền, còn phụ thuộc của phiên bản bị bỏ qua thì không được xét đến.

Hãy in ra tất cả các project mà project của bạn phụ thuộc vào (không in project của bạn) theo thứ tự từ điển theo tên.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n (1n1000) là số project.
  • Tiếp theo là mô tả của n project, các mô tả cách nhau bởi một dòng trống. Mỗi mô tả gồm:
    • Một dòng chứa tên và phiên bản của project (cách nhau bởi dấu cách).
    • Một dòng chứa số phụ thuộc trực tiếp k (0kn1), theo sau là k dòng, mỗi dòng chứa tên và phiên bản của một phụ thuộc trực tiếp.

Các project được cho theo thứ tự tùy ý, nhưng project đầu tiên luôn là project của bạn. Các phụ thuộc trong một project cũng được liệt kê theo thứ tự tùy ý. Đảm bảo không có phụ thuộc vòng.

Dữ liệu ra

  • Dòng đầu chứa số project mà project của bạn phụ thuộc vào.
  • Mỗi dòng tiếp theo chứa tên và phiên bản của một project trong đáp án, sắp xếp theo thứ tự từ điển theo tên.

Ràng buộc

  • 1n1000
  • Tên project là xâu khác rỗng gồm chữ cái latin thường, độ dài 10.
  • Phiên bản là số nguyên từ 1 đến 106.
  • Không có phụ thuộc vòng.

Ví dụ

Input Output Giải thích
4
a 3
2
b 1
c 1

b 2
0

b 1
1
b 2

c 1
1
b 2
2
b 1
c 1
Project a 3 phụ thuộc trực tiếp b 1 và c 1 (khoảng cách 1). Cả b 1 và c 1 đều phụ thuộc b 2 (khoảng cách 2), nhưng tên b đã có phiên bản hiệu lực b 1 ở khoảng cách 1 nên b 2 bị bỏ qua.
3
abc 1
2
abc 3
cba 2

abc 3
0

cba 2
0
1
cba 2
abc 1 phụ thuộc abc 3 và cba 2. Tên abc chính là tên của project bạn (đã cố định ở phiên bản 1) nên abc 3 bị bỏ qua; chỉ còn cba 2.
9
codehorses 5
3
webfrmk 6
mashadb 1
mashadb 2

commons 2
0

mashadb 3
0

webfrmk 6
2
mashadb 3
commons 2

extra 4
1
extra 3

extra 3
0

extra 1
0

mashadb 1
1
extra 3

mashadb 2
1
extra 1
4
commons 2
extra 1
mashadb 2
webfrmk 6
Ở khoảng cách 1: webfrmk 6 và (mashadb 1, mashadb 2) cùng khoảng cách nên chọn mashadb 2. Do mashadb 1 bị bỏ qua nên phụ thuộc extra 3 của nó cũng bị bỏ; extra 1 (qua mashadb 2) được chọn thay vì extra 3.

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