如果一个点需要经过奇数次我们就称其为奇点,偶数次称其为偶点。

考虑不合法的情况,有任意两个奇点不连通(自己想想为什么)。

那么需要处理的部分就是包含奇点的唯一一个连通块。先随意撸出一棵生成树,然后正常地 dfs 下去。显然,叶子结点会成为奇点,非叶子结点会成为偶点。

当然这会存在不合法的情况,即我们需要改变一些结点的奇偶性。发现 dfs 到 \(u\) 结点的过程中我们可以进行这样一种操作,\(u\to v\to u(fa_v=u)\),它同时改变了 \(u\) 和 \(v\) 的奇偶性。所以我们在处理完以 \(v\) 为根的子树后(即子树除了 \(v\) 都合法),如果 \(v\) 还不合法,我们就对 \(v\) 和 \(v\) 的父亲 \(u\) 进行这个操作,使得 \(v\) 合法。

最后只剩下根结点,如果根结点不合法就去掉最后一步(不回到根结点)。

每个非根结点至多做一次操作,每次操作花费 \(2\),再加上 dfs 的 \(2n\),所以序列长度至多是 \(4n-1\),可以放心通过。

时间复杂度 \(O(n+m)\)~

code:

#include<bits/stdc++.h>
using namespace std;
#define N 100005
#define For(i,x,y)for(i=x;i<=(y);i++)
struct node
{
bool used;
int next,to;
}e[200005];
bool vis[N],rem[N];
int opt[400005],head[N],g,cnt;
int read()
{
int A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
inline void add(int u,int v)
{
e[++g].to=v;
e[g].next=head[u];
head[u]=g;
}
void dfs(int u)
{
int i,v;
vis[u]=1;
for(i=head[u];i;i=e[i].next)
{
v=e[i].to;
if(!vis[v])dfs(v),e[i].used=1;
}
}
bool work(int u,int fa)
{
int i,v;
bool bo=1,tmp;
opt[++cnt]=u;
for(i=head[u];i;i=e[i].next)
if(e[i].used)
{
v=e[i].to;
if(v==fa)continue;
tmp=work(v,u);
opt[++cnt]=u;
bo^=1;
if(!tmp)
{
opt[++cnt]=v;
opt[++cnt]=u;
bo^=1;
}
}
return bo==rem[u];
}
void write(int X)
{
if(X<0)putchar('-'),X=-X;
if(X>9)write(X/10);
putchar(X%10|48);
}
int main()
{
int n,m,i,u,v;
n=read(),m=read();
For(i,1,m)
{
u=read(),v=read();
add(u,v),add(v,u);
}
For(i,1,n)rem[i]=read();
For(u,1,n)
if(rem[u]&1)break;
dfs(u);
For(i,1,n)
if(!vis[i]&&rem[i]&1)puts("-1"),exit(0);
if(!work(u,0))cnt--;
write(cnt);
putchar('\n');
For(i,1,cnt)write(opt[i]),putchar(' ');
return 0;
}

CF453C Little Pony and Summer Sun Celebration的更多相关文章

  1. CF453C Little Pony and Summer Sun Celebration(构造、贪心(?))

    CF453C Little Pony and Summer Sun Celebration 题解 这道题要求输出任意解,并且路径长度不超过4n就行,所以给了我们乱搞构造的机会. 我这里给出一种构造思路 ...

  2. CF453C Little Pony and Summer Sun Celebration (DFS)

    http://codeforces.com/contest/456  CF454E Codeforces Round #259 (Div. 1) C Codeforces Round #259 (Di ...

  3. codeforces 453C Little Pony and Summer Sun Celebration

    codeforces 453C Little Pony and Summer Sun Celebration 这道题很有意思,虽然网上题解很多了,但是我还是想存档一下我的理解. 题意可以这样转换:初始 ...

  4. [CF453C] Little Poney and Summer Sun Celebration (思维)

    [CF453C] Little Poney and Summer Sun Celebration (思维) 题面 给出一张N个点M条边的无向图,有些点要求经过奇数次,有些点要求经过偶数次,要求寻找一条 ...

  5. CF 453C. Little Pony and Summer Sun Celebration

    CF 453C. Little Pony and Summer Sun Celebration 构造题. 题目大意,给定一个无向图,每个点必须被指定的奇数或者偶数次,求一条满足条件的路径(长度不超\( ...

  6. CF453C-Little Pony and Summer Sun Celebration【构造】

    正题 题目链接:https://www.luogu.com.cn/problem/CF453C 题目大意 \(n\)个点\(m\)条边的一张无向图,每个节点有一个\(w_i\)表示该点需要经过奇数/偶 ...

  7. codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)

    题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...

  8. Codeforces 454E. Little Pony and Summer Sun Celebration

    题意:给n个点m条边的无向图,并给出每个点的访问次数奇偶,求构造一条满足条件的路径(点和边都可以走). 解法:这道题还蛮有意思的.首先我们可以发现在一棵树上每个儿子的访问次数的奇偶是可以被它的父亲控制 ...

  9. codeforces Round #259(div2) E解决报告

    E. Little Pony and Summer Sun Celebration time limit per test 1 second memory limit per test 256 meg ...

随机推荐

  1. 数据结构(C++)——链栈

    结点结构 typedef char ElemType; typedef struct LkStackNode{ ElemType data; LkStackNode *next; }*Stack,SN ...

  2. Java学习的第二十七天

    1.内存操作流 缓冲流 用BufferedReader读取数据 使用BufferedWriter写数据 使用BufferInputStream和BufferOutputStream读写图片 2.有很多 ...

  3. MySQL中没有FULL OUTER JOIN的处理

    FULL OUTER JOIN:SELECT column_name(s)FROM table1FULL OUTER JOIN table2ON table1.column_name=table2.c ...

  4. 自定义控件-只有横线的文本输入框(TxtLine)

    需求:在实际开发中,由于TextBox控件的背景色样式不美观,且TextBox不能直接设置背景颜色,因此需要使用自定义控件以实现如下效果 实现代码 public partial class TxtLi ...

  5. c# 创建delphi的代码

    需求: 有一个专业表,没有插入数据,读取的excel,复制为txt文件 每行读取 并且 将汉字的一转换为数字1 private void barButtonItem4_ItemClick(object ...

  6. Python正则表达式-换行的匹配

    找到了之前参考的博文,用来记录一下https://www.cnblogs.com/baxianhua/p/8572805.html 平常 点 (.)去匹配任意字符的时候,是不能匹配换行符的 匹配换行: ...

  7. 有了Cloud Alert电话报警,再也不怕遗漏告警了

    Cloud Alert 的部分应用部署在阿里云上,使用了多方面的监控服务: 阿里自身的ECS服务器和网站. Zabbix 监控服务器应用程序. OneAPM 的应用级监控. 腾讯云拨测,做网站监控. ...

  8. redis重点ppt

  9. CMake编译OpenCV4.0时opencv_ffmpeg.dll等下载失败的解决思路总结

    一.Configure会报一些红色的警告信息,比如: 1 CMake Warning at cmake/OpenCVDownload.cmake:193 (message): 2 FFMPEG: Do ...

  10. open系统调用

    /* int open(const char *pathname, int flags, mode_t mode);flag:打开方式,可以man 2 open查看 O_RDONLY    O_WRO ...