[ABC244G] Construct Good Path
Problem Statement
You are given a simple connected undirected graph with $N$ vertices and $M$ edges. (A graph is said to be simple if it has no multi-edges and no self-loops.)
For $i = 1, 2, \ldots, M$, the $i$-th edge connects Vertex $u_i$ and Vertex $v_i$.
A sequence $(A_1, A_2, \ldots, A_k)$ is said to be a path of length $k$ if both of the following two conditions are satisfied:
- For all $i = 1, 2, \dots, k$, it holds that $1 \leq A_i \leq N$.
- For all $i = 1, 2, \ldots, k-1$, Vertex $A_i$ and Vertex $A_{i+1}$ are directly connected with an edge.
An empty sequence is regarded as a path of length $0$.
You are given a sting $S = s_1s_2\ldots s_N$ of length $N$ consisting of $0$ and $1$.
A path $A = (A_1, A_2, \ldots, A_k)$ is said to be a good path with respect to $S$ if the following conditions are satisfied:
- For all $i = 1, 2, \ldots, N$, it holds that:
- if $s_i = 0$, then $A$ has even number of $i$'s.
- if $s_i = 1$, then $A$ has odd number of $i$'s.
Under the Constraints of this problem, it can be proved that there is at least one good path with respect to $S$ of length at most $4N$.
Print a good path with respect to $S$ of length at most $4N$.
Constraints
- $2 \leq N \leq 10^5$
- $N-1 \leq M \leq \min\lbrace 2 \times 10^5, \frac{N(N-1)}{2}\rbrace$
- $1 \leq u_i, v_i \leq N$
- The given graph is simple and connected.
- $N, M, u_i$, and $v_i$ are integers.
- $S$ is a string of length $N$ consisting of $0$ and $1$.
Input
Input is given from Standard Input in the following format:
$N$ $M$
$u_1$ $v_1$
$u_2$ $v_2$
$\vdots$
$u_M$ $v_M$
$S$
Output
Print a good path with respect to $S$ of length at most $4N$ in the following format.
Specifically, the first line should contain the length $K$ of the path, and the second line should contain the elements of the path, with spaces in between.
$K$
$A_1$ $A_2$ $\ldots$ $A_K$
Sample Input 1
6 6
6 3
2 5
4 2
1 3
6 5
3 2
110001
Sample Output 1
9
2 5 6 5 6 3 1 3 6
The path $(2, 5, 6, 5, 6, 3, 1, 3, 6)$ has a length no greater than $4N$, and
- it has odd number ($1$) of $1$
- it has odd number ($1$) of $2$
- it has even number ($2$) of $3$
- it has even number ($0$) of $4$
- it has even number ($2$) of $5$
- it has odd number ($3$) of $6$
so it is a good path with respect to $S = 110001$.
Sample Input 2
3 3
3 1
3 2
1 2
000
Sample Output 2
0
An empty path $()$ is a good path with respect to $S = 000000$.
Alternatively, paths like $(1, 2, 3, 1, 2, 3)$ are also accepted.
真的要图吗?可以尝试只经过图里面的一棵生成树
考虑数中序列节点相邻的在序列相邻是什么东西?欧拉环游序!
但是欧拉环游序的奇偶不一定正确,怎么办?
想一下如何改变一个位置的奇偶。可以先向他父亲走一步,然后走回来,然后再向父亲走,好像就满足了。
但是 1 没有父亲?
反正一开始都搜到了,在最后回去的时候,特判一下,不走就行了
#include<cstdio>
const int N=1e5+5;
int n,m,k,idx,a[N<<2],b[N<<2],f[N],t[N],fa[N],hd[N],e_num,u,v,c[N];
char s[N];
struct edge{
int v,nxt;
}e[N<<2];
void add_edge(int u,int v)
{
e[++e_num]=(edge){v,hd[u]};
hd[u]=e_num;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void dfs(int x,int y)
{
a[++idx]=x;
for(int i=hd[x];i;i=e[i].nxt)
{
if(e[i].v!=y)
{
dfs(e[i].v,x);
a[++idx]=x;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(find(u)!=find(v))
fa[find(u)]=find(v),add_edge(u,v),add_edge(v,u);
}
scanf("%s",s+1);
dfs(1,0);
for(int i=idx;i>=1;i--)
if(!t[a[i]])
t[a[i]]=1,f[i]=1;;
for(int i=1;i<idx;i++)
{
if(f[i])
if((c[a[i]]&1)==(s[a[i]]-'0'))
b[++k]=a[i],b[++k]=a[i+1],c[a[i+1]]++,c[a[i]]++;
b[++k]=a[i];
c[a[i]]++;
}
if((c[1]&1)!=(s[1]-'0'))
b[++k]=1;
printf("%d\n",k);
for(int i=1;i<=k;i++)
printf("%d ",b[i]);
}
[ABC244G] Construct Good Path的更多相关文章
- Path Creation and Path Painting
[Path Creation and Path Painting] Path creation and path painting are separate tasks. First you crea ...
- imutils.path
from imutils import paths # 要在哪条路径下查找 path = '...' # 查找图片,得到图片路径 imagePaths = list(imutils.paths.lis ...
- alfresco category searches...
From page 475 of the Alfresco Developer Guide- Category searches use the PATH field, but you constru ...
- ArrowLayer : A coustom layer animation
Since my other answer (animating two levels of masks) has some graphics glitches, I decided to try r ...
- Java fundamentals of basic IO
IO is a problem difficult to handle in various of systems because it always becomes a bottleneck in ...
- react native mac install
Mac上使用react native tips: 1. 安装Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...
- boost操作xml 5分钟官方教程
Five Minute Tutorial This tutorial uses XML. Note that the library is not specifically bound to XML, ...
- Device trees, Overlays and Parameters of Raspberry Pi
Raspberry Pi's latest kernels and firmware, including Raspbian and NOOBS releases, now by default us ...
- hdfs api读写文写件个人练习
看下hdfs的读写原理,主要是打开FileSystem,获得InputStream or OutputStream: 那么主要用到的FileSystem类是一个实现了文件系统的抽象类,继承来自org. ...
- Android測试环境变量配置表
要改动的文件是~/bash_profile这个配置文件,内容例如以下: # Setting PATH for Java JAVA_HOME="/Library/Java/JavaVirtua ...
随机推荐
- Spark RDD惰性计算的自主优化
原创/朱季谦 RDD(弹性分布式数据集)中的数据就如final定义一般,只可读而无法修改,若要对RDD进行转换或操作,那就需要创建一个新的RDD来保存结果.故而就需要用到转换和行动的算子. Spark ...
- 《CTFshow-Web入门》06. Web 51~60
@ 目录 web51 题解 web52 题解 原理 web53 题解 原理 web54 题解 原理 web55 题解 原理 web56 题解 原理 web57 题解 原理 web58 题解 原理 we ...
- VulnStack - ATT&CK红队评估实战(四) Writeup
VulnStack - ATT&CK红队评估实战(四) Writeup VulnStack(四)环境搭建 1.项目地址 http://vulnstack.qiyuanxuetang.net/v ...
- iOS日志获取
IOS日志获取 崩溃日志存放目录: /var/mobile/Library/Logs/CrashReporter
- 【项目源码】基于JavaEE的健康管理系统
随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台.该网站主要有教师饮食管理. ...
- signalr断开连接后重新连接
signalr断开连接后重新连接 产品需求连接signalr 不稳定,连着连着就断了,场面十分尴尬,导致产品经理现场被批!!(内心无比高兴 ) 分析得出问题现象: 服务器因某些特殊原因,导致服务停止一 ...
- PowerShell收集信息及绕过PowerShell权限
PowerShell脚本的4种执行权限: Restricted:默认设置,不允许任何script运行 AllSigned:只能运行经过数字证书签名的script RemoteSigned:本地脚本不做 ...
- FFmpeg中的常用结构体分析
一.前言 在学习使用FFmpeg进行编解码时,我们有必要先去熟悉FFmpeg中的常用结构体,只有对它们的含义和用途有深刻的了解,我们才能为后面的学习打下坚实的基础.所以,这篇文章将会介绍这些常用的结构 ...
- HTML一键打包APK工具1.9.5更新,新增一机一码功能
HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. 打包软件会 ...
- 电气工程师必学------CODESYS v3.5 入门学习笔记(一)
一.新建工程 打开软件新建工程,如图 此教程只是入门练习,所以这里一般情况下都是创建的Standard project,也就是标准工程.窗口下方可以设置工程名称与存放位置. 紧接着是选择设备与编译语言 ...