Codeforces 936B
题意略。
思路:
图论里掺杂了一些动态规划。
有几个注意点:
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的更多相关文章
- Sleepy Game CodeForces - 936B
大意: 给定有向图, 初始点S, 两个人轮流移动, 谁不能移动则输, 但后手睡着了, 先手可以控制后手操作, 求最后先手结果. 刚开始看错了, 还以为后手也是最优策略.... 实际上判断是否有偶数个节 ...
- CodeForces 937D 936B Sleepy Game 有向图判环,拆点,DFS
题意: 一种游戏,2个人轮流控制棋子在一块有向图上移动,每次移动一条边,不能移动的人为输,无限循环则为平局,棋子初始位置为$S$ 现在有一个人可以同时控制两个玩家,问是否能使得第一个人必胜,并输出一个 ...
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
随机推荐
- 在Ubuntu中安装Docker和docker的使用
1.在Ubuntu中安装Docker 更新ubuntu的apt源索引 sudo apt-get update 安装包允许apt通过HTTPS使用仓库 sudo apt-get install \ ap ...
- cesium 学习(六) 坐标转换
cesium 学习(六) 坐标转换 一.前言 在场景中,不管是二维还好还是三维也罢,只要涉及到空间概念都会提到坐标,坐标是让我们理解位置的一个非常有效的东西.有了坐标,我们能很快的确定位置相关关系,但 ...
- linux初学者-CIFS网络文件系统篇
linux初学者-CIFS网络文件系统篇 CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享.CIFS可以在linux系统和windows系统之间共享文件,因此这种文件系统主要用于客户端是 ...
- python下载报错:Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
更新pip模块的版本:python -m pip install --upgrade pip 但是遇到报错提示: Could not install packages due to an Enviro ...
- 使用secureCRT上传下载
secureCRT 的 下载 http://pan.baidu.com/s/1c1Mz1ks 下载完成后,输入yum install lrzsz,安装这个东西, 然后就可以直接在secureCRT中输 ...
- 【WPF】 InkCanvas 书写毛笔效果
首先贴出本文参考学习的文章吧. https://www.cnblogs.com/LCHL/p/9055642.html#4206298 感谢这位懒羊羊的代码和讲解(下简称羊博主),我在此基础上稍微加了 ...
- 【Android】Failed to convert @drawable/picture into a drawable
刚使用 eclipse 遇到了这个问题,图片的效果未显示出来,上网查找后发现这其实不算是问题:重启下工程或 eclipse 就行了. PS: 直接运行工程也可以,不影响效果.
- 为什么阿里Java规约禁止使用Java内置线程池?
IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒. 告诉你手动创建线程池,效果会更好. 在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有 ...
- 洛谷P1510 题解
前言: 其实这道题挺水的,但我居然把ta想成了 贪心 啪啪打脸 好了,废话不多说. 思路: step 1:先翻译以下题意,其实就是求出最多消耗多少体力能把东海填满,如果不能填满,就输出"Im ...
- Docker 架构原理及简单使用
提示:文中有些内容为大神的博客内容,就不统一标注那里引用,只是再最下面标注参考连接谢谢 一.简介 1.了解docker的前生LXC LXC为Linux Container的简写.可以提供轻量级的虚拟化 ...