BOI 2025 - Tour

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2400 (p) Thời gian: 3.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Toruń có rất nhiều điểm tham quan. Các hướng dẫn viên đã chuẩn bị một danh sách gồm \(m\) tuyến đi bộ một chiều nối \(n\) điểm hẹn trong trung tâm thành phố. Các tuyến đi bộ được đánh số từ \(1\) đến \(m\), còn các điểm hẹn được đánh số từ \(1\) đến \(n\). Mỗi tuyến đi từ một điểm hẹn đến một điểm hẹn khác và cho phép người tham gia ghé thăm đúng một điểm tham quan trên đường. Nhiều tuyến có thể đi qua cùng một điểm tham quan, và có thể có nhiều tuyến nối cùng một cặp điểm hẹn. Chúng ta muốn tổ chức một chuyến tham quan thú vị vào ngày nghỉ.

Một chuyến tham quan là một dãy các tuyến đi bộ, trong đó mỗi tuyến bắt đầu tại điểm hẹn mà tuyến trước đó kết thúc. Ngoài ra, tuyến cuối cùng phải kết thúc tại điểm hẹn mà tuyến đầu tiên bắt đầu.

Chuyến tham quan được gọi là thú vị nếu không ghé thăm cùng một điểm tham quan hai lần liên tiếp. Nói cách khác, hai tuyến liên tiếp bất kỳ phải đi qua hai điểm tham quan khác nhau; tuyến đầu tiên và tuyến cuối cùng cũng phải đi qua hai điểm tham quan khác nhau. Các tuyến không liên tiếp vẫn được phép đi qua cùng một điểm tham quan. Đặc biệt, có thể sử dụng cùng một tuyến đi bộ nhiều lần trong chuyến tham quan, nhưng không được sử dụng hai lần liên tiếp.

Hãy xác định xem có thể tổ chức một chuyến tham quan thú vị hay không, và nếu có, hãy tìm một chuyến như vậy. Bạn được phép đưa ra bất kỳ chuyến tham quan thú vị nào gồm không quá \(m\) tuyến đi bộ. Có thể chứng minh rằng nếu tồn tại một chuyến tham quan thú vị thì cũng tồn tại một chuyến như vậy gồm không quá \(m\) tuyến.

Dữ liệu vào

Dòng đầu tiên chứa số nguyên dương \(t\), là số bộ dữ liệu.

Dòng đầu tiên của mỗi bộ dữ liệu chứa hai số nguyên dương \(n\)\(m\), lần lượt là số điểm hẹn và số tuyến đi bộ.

Trong \(m\) dòng tiếp theo, dòng thứ \(i\) chứa ba số nguyên dương \(x_i\), \(y_i\)\(c_i\), mô tả tuyến đi bộ thứ \(i\): tuyến này bắt đầu tại điểm hẹn \(x_i\), kết thúc tại điểm hẹn \(y_i\) và đi qua điểm tham quan \(c_i\).

Gọi \(N\)\(M\) lần lượt là tổng các giá trị \(n\) và tổng các giá trị \(m\) trên tất cả các bộ dữ liệu.

Dữ liệu ra

Với mỗi bộ dữ liệu, in YES trên dòng đầu tiên nếu có thể tổ chức một chuyến tham quan thú vị; ngược lại, in NO.

Nếu in YES, trên dòng thứ hai, in số nguyên \(k\) với \(2 \le k \le m\), là số tuyến đi bộ trong chuyến tham quan. Tiếp theo trên cùng dòng, in \(k\) số nguyên \(p_1, p_2, \ldots, p_k\), cách nhau bởi một dấu cách, là chỉ số các tuyến theo thứ tự sử dụng. Chuyến tham quan bắt đầu bằng tuyến \(p_1\), tiếp tục với tuyến \(p_2\), và cuối cùng đi theo tuyến \(p_k\) để trở về điểm hẹn xuất phát. Dãy được in phải mô tả một chuyến tham quan thú vị; mỗi \(p_i\) nằm trong đoạn từ \(1\) đến \(m\).

Ràng buộc

  • \(1 \le t \le 5 \cdot 10^5\).
  • \(2 \le n\), \(1 \le m\).
  • \(1 \le x_i,y_i \le n\)\(x_i \ne y_i\) với mọi \(1 \le i \le m\).
  • \(1 \le c_i \le m\) với mọi \(1 \le i \le m\).
  • \(N \le 10^6\)\(M \le 10^6\).

Phân nhóm

  1. \(9\) điểm: \(m \le 10\) trong mỗi bộ dữ liệu và \(t \le 100\).
  2. \(23\) điểm: \(M \le 5000\).
  3. \(19\) điểm: \(M \le 5 \cdot 10^4\).
  4. \(25\) điểm: \(M \le 2 \cdot 10^5\).
  5. \(24\) điểm: không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
5
3 3
1 2 1
2 3 2
3 1 1
3 3
2 1 1
1 3 3
3 1 2
2 2
1 2 2
1 2 1
5 6
1 2 1
2 3 2
3 1 1
1 4 3
4 5 4
5 1 3
4 4
1 3 4
3 2 1
2 3 2
2 3 2
Output
NO
YES
2 2 3
NO
YES
6 3 4 5 6 1 2
YES
4 2 4 2 3
Giải thích

Hình dưới minh họa bộ dữ liệu thứ tư trong ví dụ. Các mũi tên biểu diễn những tuyến đi bộ giữa các điểm hẹn; nhãn trên mỗi mũi tên là điểm tham quan của tuyến đó.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: