給定乙個有n個節點的有向無環圖,圖中某些節點上有棋子,兩名玩家交替移動棋子。
玩家每一步可將任意一顆棋子沿一條有向邊移動到另乙個點,無法移動者輸掉遊戲。
對於給定的圖和棋子初始位置,雙方都會採取最優的行動,詢問先手必勝還是先手必敗。
第一行,三個整數n,m,k,n表示圖中節點總數,m表示圖中邊的條數,k表示棋子的個數。接下來m行,每行兩個整數x,y表示有一條邊從x出發指向y。
接下來一行,k個空格間隔的整數,表示初始時,棋子所在的節點編號。
若先手勝,輸出win,否則輸出lose。
6 8 42 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...