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

其实转成这个题意之后难度就降低了,因为一部分还是翻译+理解问题

判断是否为win:其实只用一个广搜就可以解决,vis[x][0/1]表示是否能在经过偶数/奇数条边的情况下到达点x,最后就是看有没有点x满足①出度为0;②vis[x][1]=1,如果有就是Win,输出路径的话直接用vis[][]记上一个点就行了

之后就是判断是否为Draw,也就是是否有环,这个就是有向图判环问题嘛,广搜求拓扑序或者深搜都可以

如果按以下方法写应该没有挂点

#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef struct
{int x;int t;
}Res;
Res now, temp;
vector<int> G[100005];
int ok, vis[100005][2], out[100005], flag[100005];
queue<Res> q;
void Print(int x, int y)
{if(vis[x][y]!=-1)Print(vis[x][y], y^1);printf("%d ", x);
}
void Sech(int x)
{int i, v;flag[x] = 1;for(i=0;i<G[x].size();i++){v = G[x][i];if(flag[v]==1)ok = 1;else if(flag[v]==0)Sech(v);}flag[x] = 2;
}
int main(void)
{int n, m, i, k, x;scanf("%d%d", &n, &m);for(i=1;i<=n;i++){scanf("%d", &x);out[i] = x;while(x--){scanf("%d", &k);G[i].push_back(k);}}scanf("%d", &k);vis[k][0] = -1;now.x = k, now.t = 0;q.push(now);while(q.empty()==0){now = q.front();q.pop();for(i=0;i<G[now.x].size();i++){temp.x = G[now.x][i];temp.t = now.t^1;if(vis[temp.x][temp.t]==0){vis[temp.x][temp.t] = now.x;q.push(temp);}}}for(i=1;i<=n;i++){if(out[i]==0){if(vis[i][1]){printf("Win\n");Print(i, 1);puts("");return 0;}}}Sech(k);if(ok)printf("Draw\n");elseprintf("Lose\n");return 0;
}

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

  1. Codeforces Round #467 (Div. 2)

    A Olympiad 输出除0以外的数字种数即可. B Vile Grasshoppers 猜想答案离y不会很远.暴力枚举答案, $O(\sqrt n)$验证,如果有因数落在区间$[2,p]$里就不合 ...

  2. Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)

    题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...

  3. Codeforces Round #467 (Div. 1): A. Save Energy!(公式)

    题意:Julia准备用她刚买的炉子煮鸡蛋,这个炉子开启之后会进入加热状态,但是k分钟之后就会自动停止并进入保温状态,在加热状态下鸡蛋会每秒获得2点热量,在保温状态下鸡蛋只会每秒获得1点热量,Julin ...

  4. Codeforces Round #301 (Div. 2) C. Ice Cave BFS

    C. Ice Cave Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/problem/C ...

  5. Codeforces Round #245 (Div. 2): C. Xor-tree(BFS)

    题意: 给你一棵树,每个节点都有一个颜色,不是黑就是白,你每次可以选择一个节点,将这个节点的颜色翻转,同时这个点所有孙子的颜色也会全部被翻转,孙子的孙子颜色也会全部被翻转-- 问至少操作多少次使得所有 ...

  6. Codeforces Round #222 (Div. 2): C. Maze(BFS)

    题意: 给你一个n*m的迷宫,'.'是路,'#'是墙,输入保证所有的'.'构成一个联通块,要求为这个迷宫再添加k面墙,使得剩下所有的'.'仍然构成一个联通块 思路:反过来处理,先将所有的'.'全部变成 ...

  7. Codeforces Round #748 (Div. 3) 题解 完整A~G

    Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

最新文章

  1. R语言诊断试验数据处理与ROC分析实战案例2
  2. burn android images with fastboot
  3. Egit Patch
  4. FZU 2171(线段树的延迟标记)
  5. Tomcat tomcat-users.xml详解
  6. FL的萌新之路,开始了!
  7. 在c语言中卖水果的程序,非常难的C语言问题!!!(悬赏80)
  8. python 命名实体识别_使用Python和Keras的有关命名实体识别(NER)的完整教程
  9. java 多重属性_最全面的44个Java 性能调优细节
  10. Kafka会不会重复消费
  11. 02-05 Python库-time datetime
  12. Comsol Multiphysics安装步骤详解
  13. LaTeX里插入数学公式
  14. 使用Mac打开mht格式文件
  15. 3060显卡系列cuda11.1
  16. 理论+股市数据实战,总结了五种常用聚类分析算法
  17. FPGA国内外发展现状
  18. 「信号机制」Python信号处理—signal模块
  19. 微信、支付宝付款码规则
  20. 栅格矩阵转换成邻接矩阵G2D函数

热门文章

  1. python爬虫-python爬虫是什么?为什么把python叫做爬虫?
  2. python与java前景-Python与Java相比,其优势在哪?
  3. python读音-原来Python应该这么念,怪不得总被嘲笑~
  4. python装饰器详解-Python装饰器基础详解
  5. python从入门到精通-python从入门到精通视频(全60集)免费高速下载
  6. python必背入门代码-Python零基础入门学习笔记(一)
  7. 语音识别相关工具和资料分享
  8. 『开源项目』基于STM32的智能垃圾桶之语音识别
  9. 有人用语音识别写作吗,如果没有,为什么?
  10. 软件测试用例模板和例子_如何编写测试用例?