Sleepy Game
题意:
在一个无向图中,找到一种策略,使得后手没有路子可走;

思路(copy自刘哥blog):

dfs。

vis[u][0]==1表示u这个点能从s点偶数路径到达

vis[u][1]==1表示u这个点能从s点奇数路径到达

这个样就能保证dfs时每个点最多被访问2次

那么如果存在一个点u,vis[u][1]==1且u的出度为0,那么就存在能Win的方案

否则,dfs染色判环,如果存在从s点出发的环,就存在Draw的方案。注意这里,只要有环就行,应为前面已经判断过不会win

不然就是Lose

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
using namespace std;const int maxn = 1e5+5;vector <int> mp[maxn],q;
int pre[maxn][2];
int vis[maxn][2],vis2[maxn];void dfs(int v,int s,int b)
{if(vis[s][b]==1)return;vis[s][b] = 1;pre[s][b] = v;for(int i=0; i<mp[s].size();i++){dfs(s,mp[s][i],b^1);}
}bool hasloop(int s)
{vis2[s]=1;bool f = false;for(int i=0; i<mp[s].size(); i++){int tmp = mp[s][i];if(vis2[tmp]==1)return true;else f=hasloop(tmp);if(f)return true;}vis2[s]=2;return false;
}
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++){int c;scanf("%d",&c);while(c--){int u;scanf("%d",&u);mp[i].push_back(u);}}int s;scanf("%d",&s);dfs(0,s,0);int u=0;for(int i=1;i<=n;i++){if(vis[i][1]==1&&mp[i].size()==0){u=i;break;}}if(u!=0){printf("Win\n");int b = 1;while(u != 0)  //这里不要写成u!=s,因为可能会再经过s;
        {//cout<<"#"<<pre[u][1]<<"-0-"<<pre[u][0]<<endl;
            q.push_back(u);u=pre[u][b];b^=1;}//printf("%d",s);for(int i=q.size()-1;i>0;i--)printf("%d ",q[i]);printf("%d\n",q[0]);}else{if(hasloop(s)){printf("Draw\n");}elseprintf("Lose\n");}return 0;
}

转载于:https://www.cnblogs.com/ckxkexing/p/8496474.html

CodeForces-937D-Sleepy Game相关推荐

  1. CodeForces - 937D Sleepy Game

    传送门:CodeForces - 937D 题意:两人进行一场走棋子的游戏,如果有人无法再继续走下去,那么他就输了.Petya先走,且如果petya的胜负优先级为:WIN>DRAW>LOS ...

  2. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  3. Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)

    题意(经过转换):给你一个n个点m条边的有向图,再给你一个起点x,问存不存在一条路径满足①路径中有奇数条边:②终点的出度为0,如果存在输出Win,并在第二行输出这个路径(可能不唯一输出任意一种),否则 ...

  4. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  5. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  6. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  7. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  8. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  9. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  10. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

最新文章

  1. deepsort原理快速弄懂——时效比最高的
  2. 动态半导体ram依据什么存储信息_都是存储器,但RAM、ROM、闪存、硬盘怎么分?...
  3. linux下confstr与uname函数_获取C库与内核信息
  4. fc oracle,使用 CLI 配置 FC
  5. java 鼠标绘图,教您如何用JAVA程序实现鼠标绘图
  6. 非线性回归模型(part3)--K近邻
  7. 【工具】Jupyter Notebook介绍
  8. 递推(hdu2563)
  9. app dcloud 打包公用证书
  10. 190610每日一句,如果你想变得更加强大,你该问问自己这个问题;失败造就了成功
  11. C++ 字符串 C#解析后 两个字符串无法连接
  12. usaconbsp;chapternbsp;2.1nbsp;castle
  13. 中国首座!智慧机场建成投运,BIM技术打造数字底图
  14. STM32的串口协议
  15. 华为digix算法大赛2020机器学习赛道-搜索相关性初赛A/B榜rank1
  16. 【jzoj5289】【NOIP2017提高组A组模拟8.17】【偷笑】【数据结构】
  17. android inflate 方法,Android LayoutInflater中 Inflate()方法应用
  18. 携程网不能访问的真相曝光
  19. 计算机及应用可以评职称么,可以跨专业评职称吗?
  20. Whitestorm.js入门

热门文章

  1. r语言中的或怎么表示什么不同_R语言 基本语法
  2. JSHOP2与ROS通信
  3. java实现微信朋友圈点赞统计,微信朋友圈点赞测试用例
  4. java游戏和flash游戏区别,小游戏的基本种类
  5. 喜欢的歌——隐形的翅膀(张韶涵)
  6. 基于jmeter+perfmon的稳定性测试记录
  7. android 视频解决方案,短视频SDK升级为短视频解决方案
  8. Carson带你学Android:RxJava、Retrofit联合使用汇总(含实例教程)
  9. h5 监听安卓物理返回键
  10. 一个在线运行的Taro小程序完整实例