正题

题目链接:https://www.luogu.com.cn/problem/CF453C


题目大意

\(n\)个点\(m\)条边的一张无向图,每个节点有一个\(w_i\)表示该点需要经过奇数/偶数次。

求一条满足条件的长度不超过\(4n\)的路径

\(1\leq n,m\leq 10^5\)


解题思路

一个结论就是一棵树是一定有解的,出了起终点每个点有入有出,如果每个点的入和出视为点的话拿去树上匹配,因为是联通图显然能够匹配并且一个点的入次数不会超过儿子个数*2+1次(好像是),这样总共次数就不会超过限制。

判无解的话就是如果有两个或以上包含奇数点的联通块就无解。

然后考虑怎么构造树的方案,把思路放在局部方面,如果一个点走完儿子它不满足条件它就需要多走一次,我们之间走到父节点然后再走回来。

此时不会影响儿子的答案并且父节点在后面还可以再进行调整。

但是根节点无法调整,不难发现我们还有一个可以使用,因为没有限制终点一定要回到根,所以我们可以最后一次不回溯到根节点就好了

时间复杂度\(O(n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+10;
struct node{
int to,next;
}a[N<<1];
int n,m,tot,w[N],ls[N],v[N];
queue<int> q;bool flag;
void addl(int x,int y){
a[++tot].to=y;
a[tot].next=ls[x];
ls[x]=tot;return;
}
void dfs(int x){
v[x]=1;flag|=w[x];
for(int i=ls[x];i;i=a[i].next)
if(!v[a[i].to])dfs(a[i].to);
return;
}
void solve(int x){
q.push(x);w[x]^=1;v[x]=1;
for(int i=ls[x];i;i=a[i].next){
int y=a[i].to;
if(v[y])continue;solve(y);
if(w[y]){q.push(x);q.push(y);w[x]^=1;}
q.push(x);w[x]^=1;
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
addl(x,y);addl(y,x);
}
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
int cnt=0;
for(int i=1;i<=n;i++){
if(v[i])continue;
flag=0;dfs(i);
cnt+=flag;
}
if(cnt>1)return puts("-1")&0;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++){
if(!w[i])continue;
solve(i);
int l=q.size();
if(w[i])l--;
printf("%d\n",l);
while(l){
printf("%d ",q.front());
l--;q.pop();
}
return 0;
}
printf("0\n");
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. CF453C Little Pony and Summer Sun Celebration

    如果一个点需要经过奇数次我们就称其为奇点,偶数次称其为偶点. 考虑不合法的情况,有任意两个奇点不连通(自己想想为什么). 那么需要处理的部分就是包含奇点的唯一一个连通块.先随意撸出一棵生成树,然后正常 ...

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

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

  5. codeforces 453C Little Pony and Summer Sun Celebration

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

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

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

  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. CF453(Div1 简单题解)

    A .Little Pony and Expected Maximum pro:给定M,N,表示一个M面的骰子,甩N次,问出现的最大的数的期望. sol:容斥,f(i)表示最大数<=i的期望,那 ...

随机推荐

  1. Spring-Boot注入自定义properties文件配置

    创建wzq.properties wzq.properties注入User实体类中 @PropertySource(value = "classpath:wzq.properties&quo ...

  2. MongoDB 数据库创建删除、表(集合) 创建删除、数据增删改查

    使用数据库.创建数据库 use student 如果真的想把这个数据库创建成功,那么必须插入一个数据. 数据库中不能直接插入数据,只能往集合(collections)中插入数据.不需要专门创建集合,只 ...

  3. mongodb+docker数据卷实现数据持久化

    # 拉取镜像docker pull mongo:4.0.22# 启动容器,挂载本地目录 docker run -itd --name mongo -p 27017:27017 -v $PWD/mong ...

  4. UWP使用命名管道与桌面程序通信 (C#)

    关于UWP的历史,其起源是Microsoft在Windows 8中引入的Metro apps.(后来又被称作Modern apps, Windows apps, Universal Windows A ...

  5. Tomcat集群Cluster实现原理

    1.Tomcat集群         Tomcat集群的问题之一是如何处理Session,Session是有状态的,请求到了Tomcat,后续流传是要根据上下文(Context)来进行的.我们可以改造 ...

  6. 超实用的idea技巧,windows技巧,用于节省时间!

    进去https://zhangjzm.gitee.io/self_study 找平常积累,或者其它的

  7. 分布式ID生成器及redis,etcd分布式锁

    分布式id生成器 有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id.以支持业务中的高并发场景.比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+.明 ...

  8. Python - 面向对象编程 - MRO 方法搜索顺序

    为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...

  9. 使用HttpRunner3+Allure+Jenkins实现Web接口自动化测试

    陆续给不同项目做了Web接口自动化测试,在尝试不同方法的同时会有新的体会.最近用到了HttpRunner3,本文将记录使用HttpRunner3+Allure+Jenkins在项目中快速实现Web接口 ...

  10. rtsp->rtmp 推流直播 Plan B

    上篇文章我们谈到使用 EasyDarwin 推流后 前端HTML播放器 播放无画面的情况,找了各种播放器都服务正常解决,但使用VLC却能正常播放的问题,我们尝试了很久最后另辟蹊径,找到 nginx安装 ...