设$f[x]$为$x$子树里的子游戏的sg值,$h[x]$为$x$所有儿子节点$f[x]$的异或和,则:

$f[x]=mex(y到x路径上所有点的h的异或和\ xor\ y到x路径上所有点的f的异或和)$,$y$是$x$子树中的一个白点。

考虑一个白点对其祖先的影响,可以发现每往上走一步,一个子树里的贡献将会异或上一个相同的数。

用Trie来维护每个点子树里所有白点的贡献,需要支持合并操作、mex的查询,以及一个异或的标记,下传时交换左右儿子。

时间复杂度$O(n\log n)$。

#include<cstdio>
const int N=100010,M=4000000;
int n,m,i,x,y,a[N],g[N],v[N<<1],nxt[N<<1],ed,f[N],h[N];
int l[M],r[M],tag[M],T[N],tot;bool val[M],fin[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
inline void rev(int d,int p,int x){if(!x||d<0)return;tag[x]^=p;if(p>>d&1){int t=l[x];l[x]=r[x];r[x]=t;}
}
inline void pb(int d,int x){if(tag[x])rev(d-1,tag[x],l[x]),rev(d-1,tag[x],r[x]),tag[x]=0;}
int build(int d,int p){int x=++tot;if(d<0)return val[x]=1,x;if(p>>d&1)r[x]=build(d-1,p);else l[x]=build(d-1,p);return x;
}
int merge(int d,int p,int x,int y){if(!y)return x;if(!x){rev(d,p,y);return y;}int z=++tot;if(d<0)return val[z]=1,z;pb(d,x),pb(d,y);if(p>>d&1)l[z]=merge(d-1,p,l[x],r[y]),r[z]=merge(d-1,p,r[x],l[y]);else l[z]=merge(d-1,p,l[x],l[y]),r[z]=merge(d-1,p,r[x],r[y]);return val[z]=val[l[z]]&val[r[z]],z;
}
inline int mex(int x){int t=0;for(int i=m;~i;i--){pb(i,x);if(!val[l[x]])x=l[x];else x=r[x],t|=1<<i;}return t;
}
void dfs(int x,int y){for(int i=g[x];i;i=nxt[i])if(v[i]!=y)dfs(v[i],x),h[x]^=f[v[i]];if(!a[x])T[x]=build(m,h[x]);for(int i=g[x];i;i=nxt[i])if(v[i]!=y)T[x]=merge(m,h[x]^f[v[i]],T[x],T[v[i]]);f[x]=mex(T[x]);
}
void cal(int x,int y,int z){z^=f[x]^h[x];if(!a[x]&&!z)fin[x]=1;for(int i=g[x];i;i=nxt[i])if(v[i]!=y)cal(v[i],x,z);
}
int main(){for(read(n),i=1;i<=n;i++)read(a[i]);for(i=1;i<n;i++)read(x),read(y),add(x,y),add(y,x);while((1<<m)<=n)m++;m--;dfs(1,0);if(!f[1])return puts("-1"),0;for(cal(i=1,0,f[1]);i<=n;i++)if(fin[i])printf("%d\n",i);return 0;
}

  

转载于:https://www.cnblogs.com/clrs97/p/5006078.html

BZOJ4134 : ljw和lzr的hack比赛相关推荐

  1. 大鱼海棠_纪中4637_Trie维护Sg函数值

    Description 椿是掌管海棠花的少女,她所在的世界不为人们所知,他们的天空就是人类的海底.生活在那个世界里的他们不是人,也不是鱼,而是其他人,掌管着人间的规律. 按照他们的习俗,在16岁那年, ...

  2. 楼天成夺Facebook黑客杯季军,已被Facebook录用得到美国绿卡

    楼天成夺Facebook黑客杯季军,已被Facebook录用得到美国绿卡 [米联社·互联网]据科技博客TNW报道,Facebook举行的"黑客杯(Hacker Cup)大赛于今日(北京时间3 ...

  3. BestCoder Round #92 比赛记录

    上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...

  4. 给各位ACMer,OIer详细介绍一下Codeforces比赛

    Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzay ...

  5. 人工智能/数据科学比赛汇总 2019.8

    内容来自 DataSciComp,人工智能/数据科学比赛整理平台. Github:iphysresearch/DataSciComp 本项目由 ApacheCN 强力支持. 微博 | 知乎 | CSD ...

  6. 1月全球CTF比赛时间汇总来了!

    ● 从事网络安全行业工作,怎么能不参加一次CTF比赛了! 小编作为一个CTF比赛老鸟,以每次都能做出签到题为荣! 下面给大家分享一下1月份CTF比赛时间,比赛按时间先后排序,国内国外的都有哦!临近新年 ...

  7. Nuit du hack 2017 webcrypto Writeup

    Nuit du hack 2017 web&crypto Writeup 新博客地址:http://bendawang.site/article/Nuit-du-hack-2017-web-a ...

  8. 武理校赛A题 ljw的剥削(思维 + map应用)

    武理校赛A题 ljw的剥削(思维 + map应用) 牛客链接 题意: 给定 a[],b[] 两个长度同为 n 的数组,经过一系列操作后, 使 p = ∑ i = 1 n m a x ( ( a i − ...

  9. Go Hack 17:Killy 日记

    "要是放在之前,我会觉得一个 hackathon 的二等奖也就只能说说,但是这次的质量让我觉得有种成就达成的感觉,于是决定把它放在我的简历里 =.=" 2017 年 10 月 21 ...

  10. 程序设计——第八周(差分约束:选数问题;拓扑排序:求比赛名次;scc:选班长)

    A.差分选数 题目描述 给定一个数轴上的 n 个区间,要求在数轴上选取最少的点使得第 i 个区间 [ai, bi] 里至少有 ci 个点 使用差分约束系统的解法解决这道题 使用差分约束系统的解法解决这 ...

最新文章

  1. NLP汉语自然语言处理原理与实践
  2. JEECMS V3.0 常用标签使用说明
  3. LeetCode Find K Pairs with Smallest Sums(大根堆、小根堆)
  4. XPS reader for Silverlight
  5. 【CyberSecurityLearning 28】批处理与简单病毒
  6. javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接
  7. JDK版本不匹配...
  8. 5.4寸iPhone 12真机曝光:可单手握住的快乐!
  9. 两个或多个线程执行完成之后继续执行之后的步骤,CountDownLatch与CyclicBarrier
  10. NMET PEER DEPENDENCY解决方法
  11. 第六章 梯度下降法 学习笔记 上
  12. 其实,前面倒腾那么多,只是为了想玩SPRING BOOT
  13. python人名抽签_办公人员的 python 妙用——抽签结果提取
  14. 如何模拟地震、噪音、颠簸路面激励下的不确定性振动行为?
  15. pta 7-5 输出2到n之间的全部素数 (15 分)
  16. 软件测试转行做产品经理,转型产品经理,测试工程师的出路!
  17. [js点滴]JavaScript基础正则详解03
  18. git报错 failed: The TLS connection was non-properly terminated
  19. C语言学习(三)数据-浮点类型
  20. 西湖大学自然语言处理(七)—— 解决OOV问题的两种平滑技术

热门文章

  1. 瀚高数据库查询表字段及备注
  2. 用定量测定葡萄糖的方法检测根管微渗漏-供应海藻酸钠修饰聚丙烯酸Alg-PAA 醛基化海藻酸钠(ASA) 海藻酸钠-多聚鸟氨酸-海藻酸(A-PLO-A)定制
  3. 谁再说“游戏没用”,就拿这个回怼他!
  4. 实践论:论认识和实践的关系
  5. 光子晶体的应用背景和研究历史
  6. 原光明中医函授大学教材
  7. nullb driver分析6-blk-mq相关定时器
  8. web前端开发的6个福利网站
  9. 域名Whois查询API,域名Whois,域名历史Whois
  10. 共享单车的扫码解锁原理是什么?2222