2599 A funny game NP狀態定理
題目:有一棵無向樹,從某個結點出發,兩個人輪流移動,走過的結點不能再走,不能移動的人輸。判斷先手必勝還是先手必敗,如果先手必勝,輸出必勝到達的節點。
思路:利用NP狀態定理,把起點的SG值算出來。
程式碼:
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<algorithm> #include<ctime> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<list> #include<numeric> using namespace std; #define LL long long #define ULL unsigned long long #define INF 0x3f3f3f3f #define mm(a,b) memset(a,b,sizeof(a)) #define PP puts("*********************"); template<class T> T f_abs(T a){ return a > 0 ? a : -a; } template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; } template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;} // 0x3f3f3f3f3f3f3f3f //0x3f3f3f3f const int maxn=1e3+5; vector<int> G[maxn]; int sg[maxn]; int get_sg(int u,int fa){ if(sg[u]!=-1) return sg[u]; sg[u]=0; for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(v==fa) continue; if(get_sg(v,u)==0) sg[u]=1; } return sg[u]; } int main(){ int n,start,u,v; while(~scanf("%d%d",&n,&start)){ for(int i=1;i<=n;i++){ G[i].clear(); sg[i]=-1; } for(int i=1;i<n;i++){ scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } int ans=get_sg(start,0); if(ans>0){ int id=n+1; for(int i=0;i<G[start].size();i++){ int v=G[start][i]; if(sg[v]==0) id=min(id,v); } printf("First player wins flying to airport %d\n",id); } else{ printf("First player loses\n"); } } return 0; }
相關推薦
2599 A funny game NP狀態定理
題目:有一棵無向樹,從某個結點出發,兩個人輪流移動,走過的結點不能再走,不能移動的人輸。判斷先手必勝還是先手必敗,如果先手必勝,輸出必勝到達的節點。 思路:利用NP狀態定理,把起點的SG值算出來。 程式碼: #pragma comment(linker, "/STACK:1
poj 2484 A Funny Game
poj spa 是個 data != while code pri urn 題目:http://poj.org/problem?id=2484 一,題意: n個硬幣圍成一個圈,Alice與Bob輪流從圈中取硬幣。每次能夠取一枚或者連續的兩枚。 硬幣取走後留下的
POJ2599 A funny game (圖博弈)
dfs track ems put std rep int layer 最小 題目鏈接:傳送門 題意: 給定一個圖,兩個人從起點出發,輪流開飛機。當離開這個點後這個點 就不能使用了。假設輪到誰了誰不能飛了就輸了。 必敗狀態非常好找,當一個人在位置s的時候
POJ 2484 A Funny Game(智商博弈)
src search 證明 ear 奇數 mem output pos 博弈 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6397 Accepted: 397
每天一道博弈論之“A funny game”(poj 2484)
log tar 硬幣 -s 獨立遊戲 div size 狀態 http 題意: n枚硬幣排成一個環,操作為可以選擇相鄰的兩個取走(相鄰指的是最開始相鄰,即不會自動補成環)。問先手勝還是後手勝。 題解: 首先我們考慮1和2,則明顯是先手必勝。
poj 2484 A Funny Game (簡單博弈)
題目連結:poj 2484 題意:給出n個順時針排列的n枚硬幣,每次只能取一個或者取相鄰的兩枚,Alice先取,問:誰取走最後一枚硬幣? 題解:這題很gou,看看程式碼你就知道了。 ///當n>=3時,Alice先拿,會把環拆成一條鏈,假如剩下奇數個硬幣數, ///那麼Bob只
POJ 2484 A Funny Game 博弈思想:複製對手操作
傳送門 這一題如果先手不能取完的話,後手一定可以通過取 1 個或者 2 個把局勢變成兩個對稱的局面,後面每一步都可以複製對方的操作,最終自己勝利。 #include <bits/stdc++.h> using namespace std; int main() { in
A Funny Game POJ
傳送門 題意:n枚硬幣排成一個圈,ALICE和BOB輪流從中取一枚或者兩枚硬幣,不過,取兩枚時,所取的兩枚硬幣必須是連續的。硬幣取走後留下空位,相隔空位的硬幣視為不連續的。ALICE開始先取,取走最後一枚硬幣的一方獲勝。當雙方都採取最有策略時,誰會獲勝? 不好解釋,先附上
POJ 2484 - A Funny Game(博弈)
題目連結 https://cn.vjudge.net/problem/POJ-2484 【題意】 n枚硬幣圍成一圈,Alice和Bob輪流取,每次取一枚或連續的兩枚。硬幣取走之後留下空位,相隔空位的硬幣是不連續的。Alice先取,取走最後一枚硬幣的一方獲勝。輸入n,當雙方都採取最優策略時
uva 1378 - A Funny Stone Game sg博弈
1.0 mat cto i+1 clas typedef article 移動 post 題意:David 玩一個石子遊戲。遊戲中,有n堆石子,被編號為0..n-1。兩名玩家輪流取石子。 每一輪遊戲。每名玩家選取3堆石子i,j,k(i<j,j<=k,且至
Uva 1378 A Funny Stone Game (ACM ICPC 2006 Asia Regional Contest Beijing A Funny Stone Game)Nim 博弈
傳送門 王曉珂的題解乍一看非常難理解,且聽我慢慢解釋。 首先考慮這樣一個子問題: 當前棋子堆的編號為 m , 要求你把這個堆,並且放入兩堆編號分別小於 m 的棋子, 這裡分別計為 i, j (i, j < m) 那麼這種情況的 SG 是怎麼求的呢? 設當前編號 m 對應的局
百練2505:A multiplication game
unsigned stdio.h multi ios ica ret reg cti std 傳送門:http://bailian.openjudge.cn/practice/2505/ 【題解】 我們找找規律: 1~9顯然是Stan wins. 10~18是Ollie w
洛谷P2964 [USACO09NOV]硬幣的遊戲A Coin Game
ima sin 兩枚 bar each player rom mem when P2964 [USACO09NOV]硬幣的遊戲A Coin Game 題目描述 Farmer John‘s cows like to play coin ga
Codeforces Round #436 A. Fair Game
set string ems 題意 include 代碼 example return round 題意:給你n張卡片,上面寫有數字,兩個人選擇兩個數字,把相同數字的卡片都拿走,問能不能拿走所有的卡片並且兩個人拿的卡片書相同。 Examples Input 4112727
POJ 2425 A Chess Game 博弈論 sg函數
數組 scanf 博弈 break struct itl clu using b- http://poj.org/problem?id=2425 典型的sg函數,建圖搜sg函數預處理之後直接求每次遊戲的異或和。仍然是因為看不懂題目卡了好久。 這道題大概有兩個坑, 1.是搜索
poj 2505 A multiplication game
sin turn 必須 col href 開始 esp 得到 style A multiplication game POJ - 2505 題目大意:兩個人輪流玩遊戲,Stan先手,數字 p從1開始,Stan乘以一個2-9的數,然後Ollie再乘以一個2-9的數,直
Gym10081 A - Arcade Game -康托展開、全排列、組合數變成遞推的思想
.net 全排列 over inpu net for each problem scan different 最近做到好多概率,組合數,全排列的題目,本鹹魚不會啊,我概率論都掛科了。。。 這個題學到了一個康托展開,有點用,瞎寫一下。。。 康托展開: 適用對象:沒有重復元
「POJ2505」A multiplication game [博弈論]
== 思路 相關 無語 兩個 scan n) include 區間 題目鏈接:http://poj.org/problem?id=2505 題目大意: 兩個人輪流玩遊戲,Stan先手,數字 p從1開始,Stan乘以一個2-9的數,然後Ollie再乘以一個2-9的數,直到誰先
[HDU3094]A tree game
根節點 pac .com 策略 min tin 單獨 tchar inline https://zybuluo.com/ysner/note/1232552 題面 一棵\(n\)個點的有根樹,兩個人輪流操作。一次操作是選擇一條邊,刪除此邊以及刪掉邊後和根不連通的部分。詢問誰