CF453C:Little Pony and Summer Sun Celebration(dfs、构造)
生活随笔
收集整理的這篇文章主要介紹了
CF453C:Little Pony and Summer Sun Celebration(dfs、构造)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解析
比較巧妙的一道題
首先做一棵dfs生成樹出來
嘗試把它的歐拉序列作為答案
但是這樣可能會有的地方不符合條件
如果x點的奇偶性不符合,就在序列中加入一個(x,fa)
同時改變x和fa的奇偶性
顯然不會超過4*n
如果根需要改奇偶性怎么辦?
最后一次回溯刪掉就行了
代碼
#include<bits/stdc++.h> using namespace std; const int N=4e5+100; const int mod=1e9+7; double eps=1e-10; #define ll long long ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f; }int n,m; struct node{int to,nxt; }p[N<<1]; int fi[N],cnt; inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;return; } bool a[N],vis[N]; int q[N],tot; void dfs(int x,int f){vis[x]=1;q[++tot]=x;a[x]^=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(vis[to]) continue;dfs(to,x);a[x]^=1;q[++tot]=x;}if(a[x]){q[++tot]=f;q[++tot]=x;a[f]^=1;a[x]^=1;}return; } int main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read();addline(x,y);addline(y,x);}int rt(0);for(int i=1;i<=n;i++){a[i]=read();if(a[i]) rt=i;}if(rt){dfs(rt,0);for(int i=1;i<=n;i++) if(a[i]){printf("-1\n");return 0;}}if(tot>1&&q[tot-1]==0) tot-=3;printf("%d\n",tot);for(int i=1;i<=tot;i++) printf("%d ",q[i]);return 0; } /* 2 3 7 4 9 9 1 2 8 3 1 4 2 4 */總結
以上是生活随笔為你收集整理的CF453C:Little Pony and Summer Sun Celebration(dfs、构造)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑插耳机没有声音怎么回事 电脑插耳机没
- 下一篇: 著名的历史人物有哪些 中国著名历史人物