Codeforces Round #467 (Div. 2) - D. Sleepy Game (找环)
http://codeforces.com/contest/937/problem/D
题意:
给你一个有向图,A和B博弈,从一个S起点开始走,谁不能走了谁就输了。
B睡着了,A替B走。所以B可以很蠢。
如果A不能赢,那么看看A能不能使游戏永远进行下去。
否则只能输了。
POINT:
要赢肯定是有一条路径,走到尾的时候刚好是奇数步。
没有这种路径,就从S开始找能不能进入一个环。
还没有的话,就只能输了。
具体是,VIS[N][2],0代表走到这个点为偶数步,1为奇数步。
所以每个点最多只会被搜到2次。不会TLE。
如果不能赢,用SPFA从s开始搜,看看就没有环。(取所以点的入度最大的那个数,如果更新超过这个数,就有环。不能是n,会超时)。
也可以用dfs染色判环,这个更简单且优秀些。
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
#define LL long long
const int N = 1e5+55;
vector<int>G[N];int vis[N][2];
int flag=0;
int ans=0;
stack<int>q;
void dfs(int u,int k)
{if(vis[u][k]==1){return;}vis[u][k]=1;for(int i=0;i<G[u].size();i++){int v=G[u][i];dfs(v,k^1);if(ans==1){q.push(u);return;}}if(G[u].size()==0&&k==1){q.push(u);ans=1;}
}
int n,m;
int col[N];
bool hasloop(int u)
{col[u]=1;for(int i=0;i<G[u].size();i++){int v=G[u][i];int f=0;if(col[v]==1) f=1;else if(col[v]==0) f=hasloop(v);if(f==1) return f;}col[u]=2;return 0;}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){int k,x;scanf("%d",&k);while(k--){scanf("%d",&x);G[i].push_back(x);}}int s;scanf("%d",&s);dfs(s,0);if(ans==1){printf("Win\n");while(!q.empty()){printf("%d ",q.top());q.pop();}}else{if(hasloop(s)) printf("Draw\n");else printf("Lose\n");}}
Codeforces Round #467 (Div. 2) - D. Sleepy Game (找环)相关推荐
- Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)
题意(经过转换):给你一个n个点m条边的有向图,再给你一个起点x,问存不存在一条路径满足①路径中有奇数条边:②终点的出度为0,如果存在输出Win,并在第二行输出这个路径(可能不唯一输出任意一种),否则 ...
- Codeforces Round #715 (Div. 1) B. Almost Sorted 找规律
传送门 文章目录 题意: 思路: 题意: 思路: 找规律yydsyydsyyds. 一看没什么想法,所以打了个表,好家伙,不打不知道,一打不得了,下面是n=6n=6n=6的符合要求的情况: 不难发现, ...
- Codeforces Round #467 (Div. 2)
A Olympiad 输出除0以外的数字种数即可. B Vile Grasshoppers 猜想答案离y不会很远.暴力枚举答案, $O(\sqrt n)$验证,如果有因数落在区间$[2,p]$里就不合 ...
- Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)
题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...
- Codeforces Round #467 (Div. 1): A. Save Energy!(公式)
题意:Julia准备用她刚买的炉子煮鸡蛋,这个炉子开启之后会进入加热状态,但是k分钟之后就会自动停止并进入保温状态,在加热状态下鸡蛋会每秒获得2点热量,在保温状态下鸡蛋只会每秒获得1点热量,Julin ...
- 图论 ---- Codeforces Round #649 (Div. 2)D题[dfs求环+深度分层求图中独立集]
D. Ehab's Last Corollary 题目大意: 就是给你一个联通图,你有两种选择 1.你可以输出包含⌈k2⌉\lceil{k\over2}\rceil⌈2k⌉个顶点得独立点集,什么是独 ...
- Codeforces Round #246 (Div. 2)
主题链接:Codeforces Round #246 (Div. 2) A:直接找满足的人数.然后整除3就是答案 B:开一个vis数组记录每一个衣服的主场和客场出现次数,然后输出的时候主场数量加上反复 ...
- Codeforces Round #748 (Div. 3) 题解 完整A~G
Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- 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 ...
最新文章
- Math.Pow()是如何在.NET Framework中实现的?
- 大学本科电子信息工程专业核心课程与主干课程
- 安卓最新系统_你的Windows电脑即将可以运行最新版安卓系统
- 使用Windows8开发Metro风格应用四
- 奇奇怪怪的知识增加了,大括号的历史你知道吗?
- 如何新建Outlook电子邮件规则实现邮件自动分类
- UITextField使用的一些细节
- Android NDK开发之 opencv manage 免安装生成opencv应用
- Hadoop生态基础学习总结
- 智能优化算法应用:基于麻雀搜索算法与双伽马校正的图像自适应增强算法 - 附代码
- 复制构造函数被调用的3种情况
- 下行文格式图片_下行文格式图片_写信封的正确格式图片 看完这些你就懂了
- 迈捷php邮箱系统源码,10分钟临时邮箱源码-php bccto.me的php版本源码 windows主机即可 - 下载 - 搜珍网...
- 英文网站建设应该如何做?如何建好一个英文网站?
- Firefox 浏览器和burp suit 证书配置
- OA是什么意思?什么是OA? OA系统是什么?
- WorkManager
- mdx格式mysql_Saiku_学习_02_Schema Workbench 开发mdx和模式文件
- 抖音吸粉_抖音的几个吸粉方法
- 【JavaWeb】Request对象详解