博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces-936B Sleepy Game
阅读量:4313 次
发布时间:2019-06-06

本文共 1709 字,大约阅读时间需要 5 分钟。

 

n点m边的有向图,

如果  一个玩家能从起点出发,走奇数步后不能再行动,

  输出Win

  输出路径

否则如果  一个玩家能走无限步 

  输出Draw

否则 

  输出Lose

 

跑一遍dfs并判环

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef long long LL; 7 8 const int maxn = 1e5 + 10; 9 vector
G[maxn];10 11 int n, m;12 bool draw;13 bool out[maxn];14 bool dp[maxn][2];15 int vis[maxn][2], nxt[maxn][2];16 17 bool dfs(int x, int s) {18 if (!out[x]) return s == 1;19 if (vis[x][s] == 2) return dp[x][s];20 vis[x][s] = 1;21 bool flag = 0;22 for (int i = 0; i < G[x].size(); i++) {23 int to = G[x][i];24 if (vis[to][s ^ 1] == 1) {
//注意不能为225 draw = 1;26 continue; 27 }28 if (dfs(to, s ^ 1)) {29 flag = 1;30 nxt[x][s] = to;31 }32 }33 vis[x][s] = 2;34 return dp[x][s] = flag;35 }36 37 void print(int x, int s) {38 printf("%d", x);39 if (nxt[x][s]) {40 printf(" ");41 print(nxt[x][s], s ^ 1);42 } else {43 puts("");44 }45 }46 47 48 49 int main() {50 scanf("%d%d", &n, &m);51 for (int i = 1; i <= n; i++) {52 int cnt;53 scanf("%d", &cnt);54 if (cnt) out[i] = 1;55 while (cnt--) {56 int to;57 scanf("%d", &to);58 G[i].push_back(to);59 }60 }61 int st;62 scanf("%d", &st);63 if (dfs(st, 0)) {64 puts("Win");65 print(st, 0);66 } else if (draw) {67 puts("Draw");68 } else {69 puts("Lose");70 }71 72 return 0;73 }

 

转载于:https://www.cnblogs.com/xFANx/p/8597209.html

你可能感兴趣的文章
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>