trang chủ / đề bài / voi18_spone

Người đặc biệt

Đề bài

Mô tả

Trong trường học mà Sơn đang theo học có N học sinh. Cũng giống như ở các trường học khác, trong trường của Sơn có người là đặc biệt có người thì không. Một học sinh muốn trở thành người đặc biệt cần giao tiếp với những học sinh đã là người đặc biệt. Sơn muốn xác định ai trong số các học sinh trong trường sẽ là người đặc biệt thông qua bảng thống kê về các lần trao đổi tin nhắn trên mạng xã hội. Chúng ta không cần quan tâm đến việc Sơn đã làm thế nào để có được bảng thống kê này. Vì bảng thống kê là quá lớn nên Sơn cần đến sự trợ giúp của máy tính. Theo qui tắc, nếu một học sinh chưa là đặc biệt mà trao đổi tin nhắn với ít ra là K người đã là đặc biệt, mỗi người ít nhất một lần, thì học sinh đó sẽ trở thành người đặc biệt. Tiếc là do hạn chế của hệ thống thu thập thông tin nên Sơn chỉ ghi nhận được các tin nhắn đã được trao đổi giữa hai người mà không biết chính xác chúng được thực hiện ở các thời điểm nào.

Yêu cầu: Biết danh sách những người đặc biệt lúc ban đầu (tức là trước khi tin nhắn đầu tiên trong bảng thống kê được thực hiện), hãy giúp Sơn xác định xem nhiều nhất có thể có bao nhiêu học sinh trở thành người đặc biệt và cụ thể đó là những người nào sau khi tất cả các tin nhắn trong bảng thống kê được thực hiện.

Dữ liệu vào

  • Dòng đầu tiên chứa 4 số nguyên được ghi cách nhau bởi dấu cách N, K, S, M tương ứng là số lượng học sinh trong trường, số lượng người đặc biệt ít nhất mà một học sinh cần trao đổi tin nhắn với họ để trở thành người đặc biệt, số lượng người đặc biệt lúc ban đầu, số lượng tin nhắn trong bảng thống kê mà Sơn sở hữu;
  • Dòng thứ hai chứa tên của S người đặc biệt trong trường trước khi tin nhắn đầu tiên trong bảng thống kê được gửi đi, trong đó tên của mỗi người là dãy gồm không quá 10 chữ cái la tinh in thường, hai tên liên tiếp được ghi cách nhau bởi một dấu cách;
  • Mỗi dòng trong số M dòng cuối ghi nhận thông tin về một tin nhắn trao đổi giữa hai học sinh bao gồm hai tên của hai học sinh được ghi phân cách nhau bởi một dấu cách. Tên của các học sinh là dãy gồm không quá 10 chữ cái la tinh in thường. Lưu ý là thứ tự các tin nhắn được liệt kê không phải là theo trình tự thời gian mà chúng được gửi đi.

Chú ý:

  • Việc trao đổi tin nhắn là hai chiều, nghĩa là nếu A trao đổi tin nhắn với B thì cũng có nghĩa là B đã trao đổi tin nhắn với A;
  • Dữ liệu đảm bảo không có hai học sinh nào trùng tên và trong bảng thống kê không có tin nhắn giữa một người với chính mình.

Dữ liệu ra

  • Dòng đầu tiên ghi tổng số người đặc biệt;
  • Dòng thứ hai ghi tên của các người đặc biệt trong trường sau khi tất cả các tin nhắn trao đổi trong bảng thống kê được thực hiện với giả thiết là trình tự thời gian mà chúng được thực hiện là trình tự được liệt kê sao cho có nhiều người trở thành đặc biệt nhất. Tên của các người đặc biệt cần được liệt kê theo thứ tự từ điển tăng dần, hai tên liên tiếp được ghi cách nhau bởi một dấu cách.

Ràng buộc

  • 1≤K≤S≤N≤10000; 1≤M≤100000;
  • Tên mỗi học sinh gồm không quá 10 chữ cái la tinh in thường.

Subtasks

  • Subtask 1 (30% số test, 30% số điểm): K=1; S≤N≤100; 1≤M≤1000;
  • Subtask 2 (40% số test, 40% số điểm): 1≤K≤S≤N≤1000; 1≤M≤10000;
  • Subtask 3 (30% số test, 30% số điểm): 1≤K≤S≤N≤10000; 1≤M≤100000.

Ví dụ

Input Output Giải thích
3 1 1 1
cuoi
son cuoi
2
cuoi son
son trao đổi tin nhắn với cuoi (đã là người đặc biệt) nên trở thành người đặc biệt.
9 2 3 6
san son rong
cuoi phuong
son anh
son cuoi
cuoi san
son phuong
san phan
5
cuoi phuong rong san son
Sau khi trao đổi tin nhắn với son và san, cuoi trở thành người đặc biệt. Tiếp đến cả son và cuoi đều trao đổi tin nhắn với phuong, nên phuong cũng trở thành người đặc biệt. Nếu coi tin nhắn giữa cuoi và phuong được thực hiện trước khi cuoi trở thành người đặc biệt (theo trình tự liệt kê) thì phuong không trở thành người đặc biệt được; nhưng có thể xếp lại trình tự để tin nhắn này được thực hiện sau. Có hai học sinh không trao đổi tin nhắn với ai nên tên của họ không xuất hiện trong dữ liệu.

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0