移棋子遊戲

2022-08-22 17:33:10 字數 1154 閱讀 3722

給定乙個有n個節點的有向無環圖,圖中某些節點上有棋子,兩名玩家交替移動棋子。

玩家每一步可將任意一顆棋子沿一條有向邊移動到另乙個點,無法移動者輸掉遊戲。

對於給定的圖和棋子初始位置,雙方都會採取最優的行動,詢問先手必勝還是先手必敗。

第一行,三個整數n,m,k,n表示圖中節點總數,m表示圖中邊的條數,k表示棋子的個數。

接下來m行,每行兩個整數x,y表示有一條邊從x出發指向y。

接下來一行,k個空格間隔的整數,表示初始時,棋子所在的節點編號。

若先手勝,輸出win,否則輸出lose。
6 8 4

2 12 4

1 41 5

4 51 3

3 53 6

1 2 4 6

win

對於全部資料,n \leq 2000,m \leq 6000,1 \leq k \leq nn≤2000,m≤6000,1≤k≤n。

//

sg函式模板題

#includeusing

namespace

std;

const

int maxm = 1e4 + 7

;const

int maxn = 2e3 + 7

;int

head[maxm], ver[maxm], nex[maxm], vis[maxm], sg[maxm], tot;

intn, m, k;

void add(int x, int

y) void dfs(int

x) ;

for (int i = head[x]; i; i =nex[i])

for (int i = 0; i <= up + 1; i++)

}}void

getsg()

}int

main()

getsg();

int ans = 0

;

for (int i = 1; i <= k; i++)

if (ans) cout << "

win"

lose

"

}

博弈 移棋子遊戲 BSOI3969

給定乙個有n個節點的有向無環圖,圖中某些節點上有棋子,兩名玩家交替移動棋子。玩家每一步可將任意一顆棋子沿一條有向邊移動到另乙個點,無法移動者輸掉遊戲。對於給定的圖和棋子初始位置,雙方都會採取最優的行動,詢問先手必勝還是先手必敗。第一行,三個整數n m k,n表示圖中節點總數,m表示圖中邊的條數,k表...

翻棋子遊戲與Nim遊戲

翻棋子遊戲 題意 乙個棋盤上每個格仔有乙個棋子,每次操作可以隨便選乙個朝上的棋子 x,y 代表第i行第j列的棋子,選擇乙個形 如 x,b 或 a,y 其中b y,a x 的棋子,然後把它和 x,y 一起翻轉,無法操作的人輸。分析 把座標為 x,y 的棋子看成大小分別為x和y的兩堆石子,則本題轉化為了...

博弈論 取棋子遊戲

題目大意 有兩堆石子,各為 n m 個,甲乙兩人輪流取石子,每次可以從任意一堆裡取走任意多個石子,也可以從兩堆中取走相同數量的石子,但不能不取。取走最後乙個石子的人為贏家。給出初始狀態,問先手有無必勝策略。資料範圍 rqnoj 256 1 n m 10000。poj 1067 1 n m 1,000...