cf936B
题意简述:给出一个有向图,问从s出发是否能找到一条长度为奇数的路径并且路径的端点出度为0,存在就输出路径,如果不存在判断图中是否存在环,存在输出Draw,否则输出lose
题解:类似于DP,将每一个点拆成两个点,d[x][0]=1表示存在一条s到x存在一条长度为奇数的路径,d[x][1]相反,然后正常bfs计算就好了
判环什么的都是小意思
#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const int maxm=2e5+5;
const int inf=1e9;
int n,m,s;
vector<int> g[maxn],ig[maxn];
int d[maxn][2],pre[maxn][2],vis[maxn];
bool dfs(int x){
vis[x]=1;
for(auto y:g[x])
if(vis[y]==1 || dfs(y)) return 1;
vis[x]=2;
return 0;
}
int main(){
cin>>n>>m;
queue<pair<int,int>> q;
for(int i=1;i<=n;i++){
int x=i,y;
int cc;
cin>>cc;
while(cc--){
cin>>y;
g[x].push_back(y);
ig[y].push_back(x);
}
if(g[x].size()==0) q.push({x,1});
}
while(q.size()){
pii x=q.front();q.pop();
for(auto y:ig[x.fi]){
if(d[y][x.se^1]==0) {
d[y][(x.se)^1]=1;
pre[y][(x.se)^1]=x.fi;
q.push({y,(x.se)^1});
}
}
}
cin>>s;
if(d[s][0]){
puts("Win");
vector<int> ans;
ans.push_back(s);
int p=s,px=0;
while(pre[p][px]){
p=pre[p][px],px^=1;
ans.push_back(p);
}
for(int i=0;i<ans.size();i++)
cout<<ans[i]<<' ';
cout<<"\n";
}
else {
if(dfs(s)) puts("Draw");
else puts("Lose");
} }
cf936B的更多相关文章
随机推荐
- Python使用requests发送post请求的三种方式
1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form-urlencoded ==最常见的post提交数 ...
- Linux文件和目录权限实战讲解
一 相关课程回顾1.1 linux文件类型当执行ls -l或ls -la 命令后显示的结果中最前面的第2~10个字符是用来表示文件权限 第一个字符一般用来区分文件和目录: d:表示是一个目录,事实上在 ...
- Mysql:自动化备份
简介 在这个数据为王的时代,数据的备份十分重要,这里就分享一篇mysql数据库自动备份的脚本(是从网上搜到的),其将配置文件和备份脚本分离,提高了安全性,脚本风格规范严谨,分享给大家希望对需要的小伙伴 ...
- Go语言实现:【剑指offer】把字符串转换成整数
该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合 ...
- 实验楼-python3简明教程笔记
#!/usr/bin/env python3 days = int(input("Enter days: ")) print("Months = {} Days = {} ...
- javascript Date对象 js全部的 时间属性 和 方法
Date() 返回当日的日期和时间. getTime() 返回 1970 年 1 月 1 日至今的毫秒数. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31).天 getDa ...
- 20200118--python学习第十一天
今日内容 函数小高级 lambda表达式 内置函数 内容回顾 1.函数基本结构 2.参数 形参 基本参数:def func(a1,a2):pass 默认值:def func(a1,a2=123):pa ...
- git-gitlab-github集合
git-gitlab-github集合 git(一): git简介 git(二): git安装和简单使用 git(三): git的分支管理 git(四): git的远程 ...
- k8s系列---EFK日志系统
文章拷于:http://blog.itpub.net/28916011/viewspace-2216748/ 用于自己备份记录错误 一个完整的k8s集群,应该包含如下六大部分:kube-dns.i ...
- Hello Rust!
准备工作 Rust是系统编程语言,会经过传统的编译.链接.生成可执行文件等过程.它依赖c/cpp的编译环境,需要提前安装c/cpp开发环境,比如安装gcc及其依赖等. 安装(macOS / Linux ...