題意
description
現在有兩個人在乙個v個結點的有向圖上玩乙個雙人遊戲,圖上的點被編號為0到v-1,保證圖中無環和自圈。遊戲的規則如下:
1.初始的時候i號點有乙個正權值value_i
2.兩名玩家依次操作,每個玩家在當前回合可以選擇乙個具有如下性質的點
-該點的權值為正
-該點具有至少一條出邊
如果不存在這樣子的點,那麼當前回合的玩家輸掉整局遊戲
3.當某名玩家選定乙個點以後,將該點的value減一,並將ki個該點可以到達的點的value加一,這ki個點由當前玩家選擇,並允許選擇重複的點(若被選擇的點value扣完後非負)
現在給出整個有向圖和初始權值,你的任務是判斷先手玩家是否存在必勝策略。
input
輸入包括多組資料。第一行乙個整數t表示資料組數。每一組資料第一行為兩個整數v和e。其中,v表示頂點的數目,e表示邊的數目。以下的e行,每行兩個整數u,v,表示存在一條u到v的邊,資料保證每個點至多存在17條出邊。接下來的一行包含v個整數k0,k1,…,kv-1,每個點的k值在0到100之間。再接下來的一行包括乙個整數r表示在這一張圖上進行的遊戲的輪數。最後的r行,每行v個整數value_0,value_1,…,value_v-1,表示每一輪的初始value,這些value值都在0到100之間。
output
對於每一組資料輸出r+1行,第一行為game#i:,表示第幾局遊戲,遊戲從1開始編號。接下來r行,每一行為round#j: result,j為當前遊戲的輪數,result為乙個字串winning或者losing表示先手的勝敗態,你可以認為兩個人都採取最優策略。在每局遊戲之後列印乙個空行,具體輸出細節參見樣例。
sample input
23 3
1 02 0
1 20 2 2
53 0 0
4 1 0
5 0 1
1 1 1
2 2 2
4 30 1
1 22 3
3 2 1 0
50 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
sample output
game#1:
round#1: losing
round#2: winning
round#3: winning
round#4: winning
round#5: losing
game#2:
round#1: losing
round#2: losing
round#3: winning
round#4: winning
round#5: losing
hint
對於20%的資料:v<=5。
對於100%的資料:t<=20,v<=100,e<=1500。
把每個點上的權值v當成v個子遊戲。最後我們用sg定理合併即可。
如何求出乙個點上的子遊戲的sg值?
注意到乙個點的後繼狀態很少,列舉再求個mex即可。
#include#include#include#includeusing namespace std;
int n,m;
#define v 105
#define e 1505
int bitscount[200010];
int head[v],v[e],nxt[e],out[v],in[v],tot=0;
bool vis[v];
int k[v];
int sg[v];
bool ap[200010];
int sum[200010];
int num[200010];
int lowbit(int x)
void solve(int u)
}int main()
for(register int i=1;i<=n;++i)scanf("%d",&k[i]);
for(register int i=1;i<=n;++i)
if(!in[i])solve(i);
int r;
scanf("%d",&r);
for(register int t=1;t<=r;++t)
if(zjr)printf("round#%d: winning\n",t);
else printf("round#%d: losing\n",t);
}puts("");
}return 0;
}
博弈 遊戲(SG 函式)
題目鏈結 小 n 和小 o 在玩遊戲。他們面前放了 n 堆石子,第 i 堆石子一開始有 ci 顆石頭。他們輪流從某堆石子中取石子,不能不取。最後無法操作的人就輸了這個遊戲。但他們覺得這樣玩太無聊了,更新了一下規則。具體是這樣的 對於一堆有恰好 m 顆石子的石頭堆,假如乙個人要從這堆石子中取石子,設他...
石子遊戲 SG函式
problem description alice 和 bob 總喜歡聚在一起玩遊戲 t t 今天他 她 們玩的是一款新型的取石子遊戲。遊戲一開始有n堆石子,alice 和 bob 輪流取出石子。在每次操作中,遊戲者必須選擇其中的一堆石子,並作出下列的其中一種操作 1 移去整堆石子 2 假設石子堆中...
組合遊戲 SG函式和SG定理
在介紹sg函式和sg定理之前我們先介紹介紹必勝點與必敗點吧.必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,...