#MN0101. Thắng, thua hay hòa trên đồ thị (Graph Game)
Thắng, thua hay hòa trên đồ thị (Graph Game)
Thắng, thua hay hòa trên đồ thị (Graph Game)
Phiên bản: Phước Hưng OJ Extended
Đề bài
Cho một đồ thị có hướng gồm đỉnh, được đánh số từ đến , và cạnh có hướng.
Một quân cờ được đặt trên một đỉnh của đồ thị. Hai người chơi lần lượt thực hiện các lượt đi trên cùng quân cờ đó.
Ở mỗi lượt, giả sử quân cờ hiện đang nằm tại đỉnh :
- người đang đến lượt phải chọn một cạnh đi ra từ ;
- nếu chọn cạnh , quân cờ được chuyển từ đỉnh sang đỉnh ;
- sau đó lượt chơi được chuyển cho đối thủ.
Nếu đến lượt một người chơi mà quân cờ đang ở một đỉnh không có bất kỳ cạnh đi ra nào, người chơi đó không thể thực hiện nước đi và thua ngay lập tức.
Đồ thị có thể chứa chu trình. Vì vậy, khác với trò chơi trên cây hoặc trên đồ thị không chu trình, một ván chơi không nhất thiết phải kết thúc.
Ví dụ, nếu quân cờ liên tục di chuyển theo một chu trình
$$u_1\rightarrow u_2\rightarrow\cdots\rightarrow u_k\rightarrow u_1,$$thì ván chơi có thể tiếp tục mãi mà không có người nào rơi vào một đỉnh không còn nước đi.
Do đó, một trạng thái của trò chơi có thể có ba kết quả khác nhau: thắng, thua hoặc hòa.
Với mỗi đỉnh , hãy tưởng tượng rằng ta bắt đầu một ván chơi mới như sau:
- quân cờ ban đầu nằm tại đỉnh ;
- một người chơi đang đến lượt tại ;
- cả hai người chơi đều chơi tối ưu, nghĩa là mỗi người luôn cố gắng đạt kết quả tốt nhất có thể cho mình.
Kết quả của trạng thái tại đỉnh được định nghĩa theo góc nhìn của người đang đến lượt tại chính đỉnh đó.
Trạng thái WIN
Đỉnh được gọi là WIN nếu người đang đến lượt tại có ít nhất một cách chơi để buộc đối thủ thua, bất kể đối thủ lựa chọn các nước đi như thế nào sau đó.
Nói cách khác, người đang đến lượt có thể đảm bảo chiến thắng.
Trạng thái LOSE
Đỉnh được gọi là LOSE nếu người đang đến lượt tại không thể tránh khỏi thất bại khi đối thủ chơi tối ưu.
Đặc biệt, mọi đỉnh không có cạnh đi ra đều là trạng thái LOSE, bởi người đang đến lượt không thể thực hiện bất kỳ nước đi nào.
Trạng thái DRAW
Đỉnh được gọi là DRAW nếu:
- người đang đến lượt không thể buộc thắng;
- đối thủ cũng không thể buộc người đó thua;
- với cách chơi tối ưu, ván chơi có thể được duy trì vô hạn.
Trong trường hợp này, không người chơi nào có thể ép ván đấu đi đến một trạng thái mà đối thủ chắc chắn thua.
Cần lưu ý rằng WIN và LOSE không chỉ một người chơi cố định.
Ví dụ, nếu đỉnh là WIN, điều đó có nghĩa là:
người nào đang đến lượt khi quân cờ ở có thể buộc thắng.
Tương tự, nếu đỉnh là LOSE, người đang đến lượt tại sẽ thua nếu đối thủ chơi tối ưu.
Ban đầu quân cờ được đặt tại đỉnh .
Hãy xác định:
- kết quả của trạng thái bắt đầu tại đỉnh ;
- kết quả của trạng thái bắt đầu tại từng đỉnh .
Input
Dòng đầu tiên chứa ba số nguyên , , :
- là số đỉnh của đồ thị;
- là số cạnh có hướng;
- là đỉnh đặt quân cờ trong trạng thái ban đầu cần xét.
Mỗi trong dòng tiếp theo chứa hai số nguyên , , biểu diễn một cạnh có hướng
Điều này có nghĩa là nếu quân cờ đang ở đỉnh , người đang đến lượt có thể chọn nước đi đưa quân cờ sang đỉnh .
Đồ thị có thể:
- có nhiều thành phần;
- chứa chu trình;
- có đỉnh không có cạnh đi ra;
- có đỉnh có nhiều lựa chọn nước đi.
Output
Dòng đầu tiên in kết quả của trạng thái bắt đầu tại đỉnh :
- in
WINnếu người đang đến lượt tại có thể buộc thắng; - in
LOSEnếu người đang đến lượt tại chắc chắn thua khi đối thủ chơi tối ưu; - in
DRAWnếu không bên nào có thể buộc thắng và ván chơi có thể tiếp tục vô hạn.
Dòng thứ hai in ra chuỗi.
Chuỗi thứ là kết quả của trạng thái khi quân cờ bắt đầu tại đỉnh và người đang đến lượt tại đỉnh đó thực hiện nước đi đầu tiên.
Các kết quả được in theo thứ tự:
Mỗi kết quả là một trong ba chuỗi:
WIN, LOSE, DRAW.
Các chuỗi trên cùng một dòng được phân cách bởi một dấu cách.
Subtask
Trong tất cả các Subtask: và mỗi cạnh thỏa mãn . Đồ thị có thể có chu trình.
- Subtask 1 — 40%: ; ;
- Subtask 2 — 60%: ; ;
2.0 s
Ví dụ
Ví dụ 1
Input
3 2 1
1 2
2 3
Output
LOSE
LOSE WIN LOSE
Giải thích
Đồ thị có dạng:
Đỉnh không có cạnh đi ra.
Nếu một người chơi bắt đầu lượt của mình tại đỉnh , người đó không thể thực hiện nước đi nào và thua ngay. Vì vậy:
Tại đỉnh , người đang đến lượt có đúng một nước đi:
Sau nước đi này, đối thủ phải bắt đầu lượt tại đỉnh , là một trạng thái LOSE.
Do đó người chơi tại đỉnh có thể buộc đối thủ thua:
Tại đỉnh , người chơi chỉ có thể đi:
Sau nước đi này, đối thủ bắt đầu lượt tại đỉnh . Nhưng đỉnh là WIN đối với người đang đến lượt tại đó.
Vì không có lựa chọn nào khác nên người chơi bắt đầu tại đỉnh chắc chắn thua:
Do , kết quả của trạng thái ban đầu là LOSE.
Ví dụ 2
Input
2 2 1
1 2
2 1
Output
DRAW
DRAW DRAW
Giải thích
Đồ thị tạo thành chu trình:
Mỗi đỉnh đều có đúng một cạnh đi ra.
Nếu quân cờ bắt đầu ở đỉnh , quá trình chơi bắt buộc diễn ra:
$$1\rightarrow2\rightarrow1\rightarrow2\rightarrow\cdots$$Không có thời điểm nào quân cờ đến một đỉnh không còn nước đi.
Vì vậy không người chơi nào có thể buộc đối thủ thua. Ván đấu có thể tiếp tục vô hạn.
Do đó:
Vì , kết quả ở dòng đầu tiên là DRAW.
Ví dụ 3
Input
4 4 1
1 2
1 3
2 4
3 3
Output
DRAW
DRAW WIN DRAW LOSE
Giải thích
Các cạnh của đồ thị là:
$$1\rightarrow2, \qquad 1\rightarrow3, \qquad 2\rightarrow4, \qquad 3\rightarrow3.$$Đỉnh không có cạnh đi ra nên người bắt đầu lượt tại đây thua ngay:
Tại đỉnh , người chơi có thể đi:
Đối thủ khi đó phải bắt đầu lượt tại đỉnh và thua. Vì vậy:
Tại đỉnh , chỉ có nước đi:
Mỗi lượt quân cờ lại quay về chính đỉnh . Ván chơi có thể tiếp tục vô hạn, nên:
Cuối cùng, tại đỉnh , người đang đến lượt có hai lựa chọn.
Nếu chọn:
đối thủ nhận trạng thái WIN, vì vậy lựa chọn này dẫn đến kết quả bất lợi.
Nếu chọn:
đối thủ nhận trạng thái DRAW, và ván chơi có thể tiếp tục vô hạn.
Người chơi tại đỉnh không thể buộc thắng, nhưng có thể tránh thua bằng cách chọn đỉnh .
Vì vậy:
Do , dòng đầu tiên là DRAW.