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

本文共 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

你可能感兴趣的文章
小错误汇总
查看>>
Spring源码系列 — Envoriment组件
查看>>
java正则表达式去除html标签,Java中正则表达式去除html标签
查看>>
使用Cobbler批量部署Linux操作系统
查看>>
【斗医】【5】Web应用开发20天
查看>>
人生的抉择-创业纪录片(二)-起步期
查看>>
设计模式系列-享元模式
查看>>
zabbix企业应用之服务端与客户端的安装
查看>>
软件项目的优先级
查看>>
实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
查看>>
无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
查看>>
java实现大数相加问题
查看>>
C#百万数据查询超时问题
查看>>
2016第10周五
查看>>
使用gson-1.6.jar解析json
查看>>
AC Milan VS Juventus(模拟)
查看>>
CentOS两台服务器利用scp拷贝文件
查看>>
SQL DatePart函数使用
查看>>
asp.net页面后退,重复弹出上一页对话框处理办法
查看>>
docker 学习
查看>>