CodeForces-937D-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相关推荐
- CodeForces - 937D Sleepy Game
传送门:CodeForces - 937D 题意:两人进行一场走棋子的游戏,如果有人无法再继续走下去,那么他就输了.Petya先走,且如果petya的胜负优先级为:WIN>DRAW>LOS ...
- Codeforces 题目合集+分类+代码 【Updating...】【361 in total】
961A - Tetris 模拟 ...
- Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)
题意(经过转换):给你一个n个点m条边的有向图,再给你一个起点x,问存不存在一条路径满足①路径中有奇数条边:②终点的出度为0,如果存在输出Win,并在第二行输出这个路径(可能不唯一输出任意一种),否则 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
- 【codeforces 812C】Sagheer and Nubian Market
[题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...
- CodeForces 获得数据
针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...
- codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...
- CodeForces 595A
题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...
- codeforces A. Jeff and Digits 解题报告
题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...
最新文章
- deepsort原理快速弄懂——时效比最高的
- 动态半导体ram依据什么存储信息_都是存储器,但RAM、ROM、闪存、硬盘怎么分?...
- linux下confstr与uname函数_获取C库与内核信息
- fc oracle,使用 CLI 配置 FC
- java 鼠标绘图,教您如何用JAVA程序实现鼠标绘图
- 非线性回归模型(part3)--K近邻
- 【工具】Jupyter Notebook介绍
- 递推(hdu2563)
- app dcloud 打包公用证书
- 190610每日一句,如果你想变得更加强大,你该问问自己这个问题;失败造就了成功
- C++ 字符串 C#解析后 两个字符串无法连接
- usaconbsp;chapternbsp;2.1nbsp;castle
- 中国首座!智慧机场建成投运,BIM技术打造数字底图
- STM32的串口协议
- 华为digix算法大赛2020机器学习赛道-搜索相关性初赛A/B榜rank1
- 【jzoj5289】【NOIP2017提高组A组模拟8.17】【偷笑】【数据结构】
- android inflate 方法,Android LayoutInflater中 Inflate()方法应用
- 携程网不能访问的真相曝光
- 计算机及应用可以评职称么,可以跨专业评职称吗?
- Whitestorm.js入门