Codeforces 937 D. Sleepy Game(DFS 判断环)
题目链接: Sleepy Game
题意:
Petya and Vasya 在玩移动旗子的游戏, 谁不能移动就输了。 Vasya在订移动计划的时候睡着了, 然后Petya 就想趁着Vasya睡着的时候同时定下策略, 如果可以赢得话输出Win 并输出路径, 如果步数在达到1e6的情况下,就认定为平局, 输出Draw,如果输的话就输出lost。
题解:
这题很容易就可以想到如果图中存在奇数长度的路径从起始点到叶子结点就是Win状态(这里还要注意绕环走的情况,比如说奇数长度的环是可以改变路径的奇偶性的),如果不存在奇数长度的路径但是存在环的话就是Draw,如果都不是就是Lost。写了以后深深地发现自己的DFS是真的挫,如何判断有向图的环@。@! DFS的时候:
res[u][0]==1表示u这个点能从s点偶数路径到达
res[u][1]==1表示u这个点能从s点奇数路径到达
如果dfs到某点发现res的值已经为1就不用再继续下去了,这样就能保证dfs时每个点最多被访问2次。那么如果存在一个点x,使得res[x][1]==1且x的出度为0,那么就是Win的方案。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5+;
int res[MAX_N][],point[MAX_N],num_s,st[MAX_N*],vis[MAX_N];
vector<int> vec[MAX_N];
int N,M,x;
void init()
{
num_s = ;
memset(st,,sizeof(st));
memset(vis,,sizeof(vis));
memset(res,,sizeof(res));
memset(point,,sizeof(point));
for(int i=; i<MAX_N; i++) vec[i].clear();
}
bool dfs(int pos,int x)
{
if(res[pos][x^] == ) return false;
res[pos][x^] = ;
st[num_s ++] = pos;
if(vec[pos].size() == && res[pos][])
{
return true;
}
for(int i=; i<vec[pos].size(); i++)
{
if(dfs(vec[pos][i],x^)) return true;
}
num_s --;
return false;
}
bool cheak(int pos)
{
vis[pos]=;
bool f=false;
for(int i=; i<vec[pos].size(); i++)
{
if(vis[vec[pos][i]]==) f=true;
else if(vis[vec[pos][i]]==) f=cheak(vec[pos][i]);
if(f) return true;
}
vis[pos] = ;
return false;
}
int main()
{
cin>>N>>M;
init();
for(int i=; i<=N; i++)
{
int num,temp;
scanf("%d",&num);
for(int j=; j<num; j++)
{
scanf("%d",&temp);
vec[i].push_back(temp);
}
}
int pos;
cin>>pos;
if(dfs(pos,))
{
cout<<"Win"<<endl;
for(int i=; i<num_s; i++)
{
printf("%d ",st[i]);
}
cout<<endl;
}
else if(cheak(pos))
cout<<"Draw"<<endl;
else
cout<<"Lose"<<endl;
}
Codeforces 937 D. Sleepy Game(DFS 判断环)的更多相关文章
- CodeForces 937D 936B Sleepy Game 有向图判环,拆点,DFS
题意: 一种游戏,2个人轮流控制棋子在一块有向图上移动,每次移动一条边,不能移动的人为输,无限循环则为平局,棋子初始位置为$S$ 现在有一个人可以同时控制两个玩家,问是否能使得第一个人必胜,并输出一个 ...
- Codeforces 711 D. Directed Roads (DFS判环)
题目链接:http://codeforces.com/problemset/problem/711/D 给你一个n个节点n条边的有向图,可以把一条边反向,现在问有多少种方式可以使这个图没有环. 每个连 ...
- Codeforces 937.D Sleepy Game
D. Sleepy Game time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- [bzoj 1064][NOI2008]假面舞会(dfs判断环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1064 分析: 如果a看到b,则a->b 那么: 1.如果图中有环,则说明这个环的 ...
- 【dfs判负环】BZOJ1489: [HNOI2009]最小圈
Description 找出一个平均边权最小的圈. Solution 经典问题,二分答案判断有无负环. 但数据范围大,普通spfa会超时,于是用dfs判负环(快多了). 思路是dis设为0,枚举每个点 ...
- Floyd判断环算法总结
Floyd判断环算法 全名Floyd’s cycle detection Algorithm, 又叫龟兔赛跑算法(Floyd's Tortoise and Hare),常用于链表.数组转化成链表的题目 ...
- HDU 2647 Reward(拓扑排序+判断环+分层)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题目大意:要给n个人发工资,告诉你m个关系,给出m行每行a b,表示b的工资小于a的工资,最低工 ...
- Atcoder Grand Contest 032C(欧拉回路,DFS判环)
#include<bits/stdc++.h>using namespace std;int vis[100007];vector<int>v[100007];vector&l ...
- 洛谷2444(Trie图上dfs判环)
要点 并没问具体方案,说明很可能不是构造. 思考不断读入这个文本串,然后中间不出现某些文法的串.啊,这就是个自动机. 将不合法串使用ac自动机构成一个Trie图,我们需要的字符串就是在这个自动机上无限 ...
随机推荐
- Windows平台使用Gitblit搭建Git服务器教程
Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...
- 详细透彻解读Git与SVN的区别(集中式VS分布式)
Git是目前世界上最先进的分布式版本控制系统,其实 Git 跟 SVN一样有自己的集中式版本库或服务器,但是Git 更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect ou ...
- GitBlit集成AD域LDAP
GitBlit的配置文件: gitlblit安装目录下的 /data/gitblit.properties ,用记事本或其他编译器打开即可. 集成AD域的LDAP操作步骤 打开配置文件,添加以下内 ...
- [T-ARA][Apple is A]
歌词来源:http://music.163.com/#/song?id=22704474 달콤달콤해 짜릿짜릿해 [tal-Kom-dal-Ko-mae jja-lid-jja-li-Tae] 반짝반 ...
- Javascript能做什么 不能做什么。
JavaScript可以做什么?用JavaScript可以做很多事情,使网页更具交互性,给站点的用户提供更好,更令人兴奋的体验. JavaScript使你可以创建活跃的用户界面,当用户在页面间导航时向 ...
- 【目录】利用Python进行数据分析(第2版)
第一章 准备工作 1.1 What Is This Book About(这本书是关于什么的) 1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) ...
- Sequelize-nodejs-6-Instances
Instances实例 Building a non-persistent instance构建非持久性实例 In order to create instances of defined class ...
- Python学习笔记系列——数据结构相关
Python有4种数据结构:列表(list).字典(dictionary).元组(Tuple).集合(set).从最直接的感官上来说,这四种数据结构的区别是:列表中的元素使用方括号括起来,字典和集合是 ...
- 通过条件注解@Conditional细粒度的选择bean实例
在进行spring进行开发时,当某个接口有多种实现方式并且我们只想让一种生效时,比如声明如下一个接口和两个实现: public interface LanggageService { String s ...
- 修改Ubuntu从文本界面登录
1, 编辑grup文件 #sudo vim /etc/default/grup //找到这行 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" / ...