poj 2599 A funny game 博弈论

时间:2023-03-09 17:15:07
poj 2599 A funny game 博弈论

思路:无向图,走过的点不能在走。dfs搞定……

再就是后继中有必败点的为必胜点!

代码如下:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int ans;
vector<int>p[];
bool vis[];
int dfs(int n)
{
for(int i=;i<p[n].size();i++){
if(!vis[p[n][i]]){
vis[p[n][i]]=;
if(!dfs(p[n][i])){
ans=p[n][i];
return ;
}
vis[p[n][i]]=;
}
}
return ;
}
int main()
{
int n,m,a,b;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<n;i++) p[i].clear();
memset(vis,,sizeof(vis));
for(int i=;i<n;i++){
scanf("%d%d",&a,&b);
p[a].push_back(b);
p[b].push_back(a);
}
vis[m]=;
if(dfs(m)) printf("First player wins flying to airport %d\n",ans);
else printf("First player loses\n");
}
return ;
}