XSY 1149 sg函式 遊戲

2021-08-29 02:57:53 字數 2296 閱讀 1706

題意

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 我們以此為基本前提進行推理,換句話說,...