还好这场没打 MD什么破题

n<=100000,m<=200000的图问从s点出发能否走奇数条边到一个没有出度的点。

直观的想法:做一个bfs,$f(i,0/1)$表示从$s$出发到$i$能否走奇数/偶数条边,搜出来,找一个$f(t,1)=1$ && $ chudu(t)=0$的点做终点。

如果找不到,就看能否走进一个环。

然后开始跳坑辣!(排名不分先后)

坑一:能否走进一个环,咋写?我先这样写的

mdzz,直接搜好像不靠谱。。老老实实写tarjan吧

坑二:最后构造答案,咋写?

法一:反向图再跑一次bfs,从起点开始跑,看一条边两端的点是否一个$f(i,1)=1$一个$f(j,0)=1$,能就走。然后挂了。

由于路上可能有一个偶环,为了不让人在里面死循环,我先判的一个点不经过超过两次。

然后有这个图:

你xx在玩我!

坑三:

法二:zz吧直接bfs的时候记个前驱,从终点开始往前跑,跑到起点结束。嗯好像没啥毛病。

。。。。。。。。。。。。。。。

好吧往前跑的时候记一下奇数条边还是偶数,偶数就别停了。

  1 //#include<iostream>
  2 #include<cstring>
  3 #include<cstdlib>
  4 #include<cstdio>
  5 //#include<map>
  6 #include<math.h>
  7 //#include<time.h>
  8 //#include<complex>
  9 #include<algorithm>
 10 using namespace std;
 11
 12 int n,m,s;
 13 #define maxn 200011
 14 #define maxm 200011
 15 struct Edge{int to,next;};
 16 struct Graph
 17 {
 18     Edge edge[maxm]; int first[maxn],le; bool du[maxn];
 19     Graph() {le=2;}
 20     void in(int x,int y) {Edge &e=edge[le]; e.to=y; e.next=first[x]; first[x]=le++; du[x]=1;}
 21
 22     bool d[maxn],b[maxn],vis[maxn]; int pd[maxn],pb[maxn];
 23     int que[maxn],head,tail;
 24     void sh(int s)
 25     {
 26         que[head=(tail=1)-1]=s;
 27         d[s]=0; b[s]=1; vis[s]=1;
 28         while (head!=tail)
 29         {
 30             int now=que[head++]; if (head==maxn) head=0; vis[now]=0;
 31             for (int i=first[now];i;i=edge[i].next)
 32             {
 33                 Edge &e=edge[i];
 34                 if (d[e.to]==0 && b[now])
 35                 {
 36                     d[e.to]=1; pd[e.to]=now;
 37                     if (!vis[e.to])
 38                     {
 39                         vis[e.to]=1;
 40                         que[tail++]=e.to;
 41                         if (tail==maxn) tail=0;
 42                     }
 43                 }
 44                 if (b[e.to]==0 && d[now])
 45                 {
 46                     b[e.to]=1; pb[e.to]=now;
 47                     if (!vis[e.to])
 48                     {
 49                         vis[e.to]=1;
 50                         que[tail++]=e.to;
 51                         if (tail==maxn) tail=0;
 52                     }
 53                 }
 54             }
 55         }
 56     }
 57
 58     int dfn[maxn],Time,low[maxn],sta[maxn],top; bool insta[maxn];
 59     bool dfs(int x)
 60     {
 61         low[x]=dfn[x]=++Time;
 62         sta[++top]=x; insta[x]=1;
 63         for (int i=first[x];i;i=edge[i].next)
 64         {
 65             Edge &e=edge[i];
 66             if (!dfn[e.to])
 67             {
 68                 if (dfs(e.to)) return 1;
 69                 low[x]=min(low[x],low[e.to]);
 70             }
 71             else if (insta[e.to]) low[x]=min(low[x],dfn[e.to]);
 72         }
 73         if (dfn[x]==low[x])
 74         {
 75             if (sta[top]!=x) return 1;
 76             top--; insta[x]=0;
 77         }
 78         return 0;
 79     }
 80     bool roll(int s) {Time=top=0; return dfs(s);}
 81 }g,fg;
 82
 83 int ans[maxn*10],lans=0;
 84 int main()
 85 {
 86     scanf("%d%d",&n,&m);
 87     for (int i=1,x,y;i<=n;i++)
 88     {
 89         scanf("%d",&x);
 90         for (int j=1;j<=x;j++) scanf("%d",&y),g.in(i,y),fg.in(y,i);
 91     }
 92     int s,t=0;
 93     scanf("%d",&s);
 94     g.sh(s);
 95     for (int i=1;i<=n;i++) if (!g.du[i] && g.d[i]) {t=i; break;}
 96     if (t)
 97     {
 98         puts("Win");
 99         for (int x=t,sb=0;x!=s || ((lans&1)==0);sb^=1)
100         {
101             ans[++lans]=x;
102             if (sb) x=g.pb[x];
103             else x=g.pd[x];
104         }
105         ans[++lans]=s;
106         for (int i=lans;i;i--) printf("%d ",ans[i]);
107     }
108     else
109     {
110         if (g.roll(s)) puts("Draw");
111         else puts("Lose");
112     }
113     return 0;
114 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/8475439.html

Codeforces936B. Sleepy Game相关推荐

  1. UVA10427 Naughty Sleepy Boys【数学】

    Hasan and Tanveer are two naughty boys of the class. They spent most of their class time playing 'Ti ...

  2. P5200 [USACO19JAN]Sleepy Cow Sorting

    P5200 [USACO19JAN]Sleepy Cow Sorting 题目描述 Farmer John正在尝试将他的N头奶牛(1≤N≤10^5),方便起见编号为1-N,在她们前往牧草地吃早餐之前排 ...

  3. LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组

    \(\mathrm{Sleepy Cow Sorting}\) 问题描述 LG5200 题解 树状数组. 设\(c[i]\)代表\([1,i]\)中归位数. 显然最终的目的是将整个序列排序为一个上升序 ...

  4. Codeforces937D Sleepy Game

    题意:两个人在有向上进行博弈,先手先下,后手在睡觉,所以后手由先手代下,每个人每次要沿着边移动,不能移动的人输,问最后先手是赢还是输还是平局,赢的话输出路径 题解:两个人进行博弈,先手帮后手下,所以先 ...

  5. Sleepy Kaguya

    https://ac.nowcoder.com/acm/contest/338/C 题解:验算一下,发现其实只有1和-1两个答案.奇数为-1,偶数为1: 演算过程: G(k)=F[k+1]*F[k+1 ...

  6. P5200 [USACO19JAN]Sleepy Cow Sorting 牛客假日团队赛6 D 迷路的牛 (贪心)

    链接:https://ac.nowcoder.com/acm/contest/993/E 来源:牛客网 对牛排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  7. CodeForces - 937D Sleepy Game

    传送门:CodeForces - 937D 题意:两人进行一场走棋子的游戏,如果有人无法再继续走下去,那么他就输了.Petya先走,且如果petya的胜负优先级为:WIN>DRAW>LOS ...

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

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

  9. P5200 [USACO19JAN]Sleepy Cow Sorting G

    题目描述 Farmer John正在尝试将他的 NN 头奶牛(1\le N\le 10^51≤N≤105),方便起见编号为 1\ldots N1-N,在她们前往牧草地吃早餐之前排好顺序. 当前,这些奶 ...

  10. Sleepy Cow Herding

    题目描述 Farmer John的三头获奖奶牛Bessie.Elsie和Mildred,总是会迷路走到农场上遥远的地方去!他需要你帮助将她们一起赶回来. 农场的草地大体是一块狭长的区域--我们可以将其 ...

最新文章

  1. @HostListener 可接收的事件列表
  2. 顶会paper越来越多,我该怎么看?
  3. 一个简单的mysql存储过程
  4. 石化总部java面试题_中国石化面试经验
  5. html修改details范围,HTML details 标签
  6. by mango怎么group_java – MongoDB中计算的group-by字段
  7. request.getParameter、request.getParameterValues、request.getParameterMap用法
  8. 《Linux嵌入式实时应用开发实战(原书第3版)》—2.2 硬件需求
  9. 关于渗透测试以及网络安全法
  10. comsol 学习笔记【基础知识,磁场与结构场耦合为主】
  11. 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(下)
  12. [Openwrt 项目开发笔记]:DDNS设置(五)
  13. 最新腾讯防水墙滑块验证码破解,代码可以直接运行
  14. 信用修复的社会意义及基本概念、要素?
  15. Codeforces 887D - Ratings and Reality Shows
  16. 什么是动态代理?动态代理有哪些应用?如何编写动态代理案例
  17. unity-光照实时GI(Realtime GI)
  18. Python爬虫初级(十一)—— Selenium 详解
  19. NetVLAD场景识别模型解读
  20. GitBook运行报错 - Error: ENOENT: no such file or directory, stat

热门文章

  1. 2-2日期时间类型基础
  2. ICEM 准备工作-常用操作
  3. 深度剖析U8系统前后台数据关系-王成军-专题视频课程
  4. 为什么不带图发不了朋友圈?微信发朋友圈不带图片怎么发
  5. 离散-如何确定哈斯图极大极小元、最大最小元、最大最小上下界
  6. linux 安装xamp
  7. qt自定义控件-水波纹进度条
  8. linux实验报告ALU,《linux内核分析》第一次课 实验作业
  9. android 系统 迷你pc,Remix mini:一款真正运行安卓系统的电脑
  10. php伪装请求ip,php搞定ip伪装的两种方式