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的更多相关文章
随机推荐
- Git详解之特殊工具
前言 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你将领略到 ...
- Spring注解开发系列专栏
这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...
- SpringBoot高级篇Ⅸ --- 热部署与监控管理
一.热部署 在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们不希望重启应用的情况下,程序可以自动部署(热部署). 1.1 模板引擎 在SpringBoot中开发情况 ...
- 仅主机、NAT、桥接模式
三种模式区别: 桥接模式 :通过主机映射一个ip给虚拟机,只要主机可以访问外网.虚拟机也可以访问,两机可以相互通信. NAT模式:主机和虚拟机在同一个地址,原则上两者不能相互通信,但是通过修改NAT配 ...
- c++中的动态内存分配
使用new和delete动态的分配和释放内存 使用new来分配新的内存块,通常情况下,如果成功,new将返回一个指针,指向分配的内存,否则将引发异常,使用new时,需要指定要为那种数据类型分配内存: ...
- DotNetty发送请求的最佳实践
长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的 ...
- non-local static 变量初始化顺序不确定,带来的问题
所谓static对象,其寿命从被构造出来直到程序结束为止,因此stack和heap-based对象都被排除.这种对象包括global对象.定义于namespace作用域内的对象,classes内.在函 ...
- C语言学习笔记--void
void真正发挥的作用在于: (1) 对函数返回的限定: (2) 对函数参数的限定. 先给一个例子 定义函数返回值 函数名(参数1,参数2,参数3,.......){内容}int sum(int a ...
- 批处理(BAT) Ping监控, 结果记录入日志文件
::执行效果 @echo off ::等待用户输入需要监控IP set /p ip=Input the IP required to monitor: echo executing...... :st ...
- linux下安装php的svn模块
在php下为了方便使用svn命令,还是安装下php的svn扩展 首先确保机器上已经有lamp或lnmp环境,然后 >yum install subversion subversion-devel ...