题意略。

思路:

图论里掺杂了一些动态规划。

有几个注意点:

1.dp时状态的设计:因为我们要寻求的是出度为0并且可以从起点走奇数步抵达的点,由于同一个点可以通过多种方式到达。

并且我们在获得奇数步点的时候,需要偶数步点作为支撑,所以visit[ i ][ j ]表示第i个点能否具备j状态(0、1),也即奇偶数步。

2.dp采用spfa,也即刷表法。在使用spfa时,最好将点和状态一起打包。

3.判断有向图是否存在环,可以采用拓扑排序。

详见代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + ; struct node{
int v,state;
node(int v = ,int state = ){
this->v = v;
this->state = state;
}
}; int visit[maxn][],out[maxn],indegree[maxn],n,m,s;
bool vis[maxn];
vector<int> graph[maxn],vs;
queue<node> que;
queue<int> topque; void spfa(){
memset(visit,,sizeof(visit));
visit[s][] = -;
que.push(node(s,));
while(que.size()){
node nd = que.front();
que.pop();
int v = nd.v,state = nd.state;
for(int i = ;i < graph[v].size();++i){
int u = graph[v][i];
if(!visit[u][state ^ ]){
visit[u][state ^ ] = v;
que.push(node(u,state ^ ));
}
}
}
}
bool judcircle(){
int cnt = ;
for(int i = ;i <= n;++i){
if(!visit[i][] && !visit[i][]) continue;
if(indegree[i] == )
topque.push(i);
++cnt;
}
while(topque.size()){
int v = topque.front();
topque.pop();
--cnt;
for(int i = ;i < graph[v].size();++i){
int u = graph[v][i];
indegree[u] -= ;
if(indegree[u] == ) topque.push(u);
}
}
return cnt > ;
}
void dfs(int cur){
for(int i = ;i < graph[cur].size();++i){
int v = graph[cur][i];
++indegree[v];
if(indegree[v] == ){
dfs(v);
}
}
} int main(){
scanf("%d%d",&n,&m);
memset(indegree,,sizeof(indegree));
for(int i = ,to;i <= n;++i){
scanf("%d",&out[i]);
for(int j = ;j < out[i];++j){
scanf("%d",&to);
graph[i].push_back(to);
}
}
scanf("%d",&s);
dfs(s);
spfa();
bool circle = judcircle();
bool jud = false;
for(int i = ;i <= n && !jud;++i){
if(!out[i] && visit[i][] != ){
jud = true;
printf("Win\n");
int now = ;
for(int v = i;v != -;v = visit[v][now],now = now ^ ){
vs.push_back(v);
}
for(int j = vs.size() - ;j >= ;--j){
printf("%d%c",vs[j],j ? ' ' : '\n');
}
}
}
if(!jud){
printf("%s\n",circle ? "Draw" : "Lose");
}
return ;
} /*
6 6
1 2
2 3 4
1 5
1 5
1 6
0
3
*/

Codeforces 936B的更多相关文章

  1. Sleepy Game CodeForces - 936B

    大意: 给定有向图, 初始点S, 两个人轮流移动, 谁不能移动则输, 但后手睡着了, 先手可以控制后手操作, 求最后先手结果. 刚开始看错了, 还以为后手也是最优策略.... 实际上判断是否有偶数个节 ...

  2. CodeForces 937D 936B Sleepy Game 有向图判环,拆点,DFS

    题意: 一种游戏,2个人轮流控制棋子在一块有向图上移动,每次移动一条边,不能移动的人为输,无限循环则为平局,棋子初始位置为$S$ 现在有一个人可以同时控制两个玩家,问是否能使得第一个人必胜,并输出一个 ...

  3. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  4. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  7. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  8. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  9. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

随机推荐

  1. Android入门简介

    GeoQuiz应用是由一个activity和一个布局(layout)组成. activity是Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互. 布局定义了一系列用 ...

  2. 小白学python-day05-IDE、格式化输出、For While循环、断点、continue、break

    今天是day05,以下是学习总结. 但行努力,莫问前程. ----------------------------------------------------------------------- ...

  3. linux初学者-输出输入管理

      1.输出重定向 在linux中,因为用户的权限不同,所以访问某些文件或者目录会被拒绝而形成错误输出,这些错误的输出也会显示出来.一般正确输出的编号为1,错误输出的编号为2.如下图,在普通用户stu ...

  4. bootstrap-treeview后台Json数据的封装及前台的显示

    1.bootStrap-treeview是我们常用的树形结构,页面风格也比较清新,但是后台数据的封装比较麻烦,经过研究终于解决,和大家分享一下. 2.前端代码如下 <script> var ...

  5. Java类什么情况下被初始化?

    1.创建类的实例(new 的方式).访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法 2.反射的方式 3.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需先触发其父类的初始 ...

  6. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  7. Kubernetes容器集群管理环境 - Prometheus监控篇

    一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...

  8. 运营商手机视频流量包业务日志ETL及统计分析

    自己做过的项目在这里做一个记录,否则就感觉不是自己的了.一是因为过去时间已经很长了,二是因为当时做得有点粗糙,最后还不了了之了. 话不多说,先大致介绍一下项目背景.以前各大手机视频 App 一般都有运 ...

  9. v-text,v-html等区别

    首先我们知道vue中有很多自定义指令,以v- 开头,例如:v-text,v-bind,v-model, v-if,等 在这些指令中,部分指令之间是很容易被混淆,所以今天决定自己总结一下以下几个相似指令 ...

  10. git常用指令整理

    git常用指令一览表 GIT指令 说明 git add . 将全部文件的内容加到Git索引以便执行commit. 这个指令不会检查文件夹中是否有文件被删除. 要注意的是,只有执行" git ...