CodeForces 430C Xor-tree(DFS)

来源:互联网 发布:阳江市网络问政 编辑:程序博客网 时间:2024/05/22 14:14

首先翻得顺序一定是按照树的深度,由上至下,每遇到一个不一样的就要翻,然后更新这个子树。但是这样显然是超时的。

实际上在一棵子树中,按照层次的奇偶性可以分成两个集合,设为a,b,如果根节点在a集合,并且要修改,那么修改的就是b集合,反正一样。于是就从根节点开始DFS,每向下搜一层,层次的奇偶就发生了互换,所以交换a1,a2。


输入给的边不一定是什么方向的,邻接表要全都添加,然后DFS时开vis数组判断。


代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;#include <vector>#include <queue>vector <int > G[100005];int N;int pre[100005];int ord[100005];int res[100005];int rnum;bool vis[100005];void solve(int n,int a1,int a2){if((pre[n]^a1)!=ord[n]){res[++rnum]=n;a1=!a1;}for(int i=0;i<G[n].size();i++){if(!vis[G[n][i]]){vis[G[n][i]]=1;solve(G[n][i],a2,a1);}}}int main(){scanf("%d",&N);for(int i=1;i<N;i++){int s,t;scanf("%d%d",&s,&t);G[t].push_back(s);G[s].push_back(t);}for(int i=1;i<=N;i++){scanf("%d",&pre[i]);}for(int i=1;i<=N;i++){scanf("%d",&ord[i]);}vis[1]=1;solve(1,0,0);printf("%d\n",rnum);for(int i=1;i<=rnum;i++){printf("%d\n",res[i]);}return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳机戴的耳朵疼怎么办 擤鼻涕左耳朵疼怎么办 擤完鼻涕耳朵疼怎么办 五岁儿童耳朵疼怎么办 耳朵里面长了个硬包怎么办 耳朵里有耳屎响怎么办 耳屎粘在耳膜上怎么办 小孩脖子上有淋巴结怎么办 大腿内侧的筋疼怎么办 大腿内侧磨的疼怎么办 孕晚期大腿根疼怎么办 吞口水耳朵会响怎么办 耳朵里面老痒该怎么办 牙疼头疼耳朵疼怎么办 耳朵里流水还疼怎么办 单侧耳朵里面疼怎么办 打到睾丸很疼怎么办 大拇手指关节疼怎么办 早上醒来耳朵嗡嗡响怎么办 两个月宝宝起湿疹怎么办 运动时耳朵闷堵怎么办 刚打的耳洞红肿怎么办 耳洞好了又肿了怎么办 耳洞发炎流血了怎么办 脸上出油怎么办小窍门 耳洞发炎化脓了怎么办 狗狗耳朵化脓了怎么办 狗狗耳朵破了怎么办 泰迪肛门腺发炎怎么办 狗狗肛门腺发炎怎么办 狗狗耳朵受伤了怎么办 狗狗的耳朵发热怎么办 头疼带的耳朵疼怎么办 戴眼镜压耳朵疼怎么办 偏头神经跳疼怎么办 脸消肿后有硬块怎么办 拔完智齿好疼怎么办 补过的牙裂了怎么办 补牙后吃冷热疼怎么办 假体下巴肿疼怎么办 左脸疼痛张嘴疼怎么办