点分治+SG函数还真是令人意外的组合啊

思路

这道题看到找一条满足条件的链,想到点分治

看到博弈,想到SG函数

然后就变成一道SG函数+点分治的题了

然后1e9的SG函数怎么搞?当然是打表了

然后各种出锅

  • 多组数据记得清零
  • SG函数不要打错表QwQ

因为对着租酥雨julao的blog调了好久,所以代码极其相似

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <unordered_map>
using namespace std;
int T,n,s,k,fir[30100],nxt[30100<<1],u[30100<<1],v[30100<<1],cnt,root,sz[30100],f[30100],vis[30100],ass=0,Siz,w_p[30100],tp_val;
unordered_map<int,int> S;
void addedge(int ui,int vi){
cnt++;
u[cnt]=ui;
v[cnt]=vi;
nxt[cnt]=fir[ui];
fir[ui]=cnt;
}
int SG3(int x){//k==3 时 , SG[x]=floor(x/k)
return x/s;
}
int SG1(int x){//k==1 时 , SG[x]=x
return x;
}
int SG2(int x){
if((x+1)%(s+1)==0)
return 2;
else
return x%2;
}
int SG4(int x){
if(!x)
return 0;
if(x%4==1||x%4==2)
return x;
if(x%4==3)
return x+1;
else
return x-1;
}
int SG(int x){
if(k==1)
return SG1(x);
else if(k==2)
return SG2(x);
else if(k==3)
return SG3(x);
else if(k==4)
return SG4(x);
else
return 0;
}
void findroot(int u,int fa){
sz[u]=f[u]=1;
for(int i=fir[u];i;i=nxt[i]){
if(vis[v[i]]||v[i]==fa)
continue;
findroot(v[i],u);
sz[u]+=sz[v[i]];
f[u]=max(f[u],sz[v[i]]);
}
f[u]=max(Siz-sz[u],f[u]);
if(f[u]<f[root] || !root)
root=u;
}
void queryhas(int u,int fa,int d){
if(S[d^tp_val])
ass=1;
for(int i=fir[u];i;i=nxt[i]){
if(v[i]==fa||vis[v[i]])
continue;
queryhas(v[i],u,d^w_p[v[i]]);
}
}
void getxor(int u,int fa,int d){
S[d]++;
for(int i=fir[u];i;i=nxt[i]){
if(v[i]==fa||vis[v[i]])
continue;
getxor(v[i],u,d^w_p[v[i]]);
}
}
void divide(int u){
vis[u]=true;
S[0]++;
tp_val=w_p[u];
for(int i=fir[u];i;i=nxt[i]){
if(vis[v[i]])
continue;
queryhas(v[i],0,w_p[v[i]]);
getxor(v[i],0,w_p[v[i]]);
}
S.clear();
for(int i=fir[u];i;i=nxt[i]){
if(vis[v[i]])
continue;
Siz=sz[v[i]];
root=0;
findroot(v[i],0);
divide(root);
}
}
// void SG(int s){
// for(int i=1;i<=90;i++){
// memset(barrel,0,sizeof(barrel));
// for(int j=1;j<=i;j++){
// barrel[sg[i-j]]=true;
// }
// for(int j=1;j<i;j++){
// barrel[sg[j]^sg[i-j]]=true;
// }
// for(int j=0;j<=10000-1;j++)
// if(!barrel[j]){
// sg[i]=j;
// break;
// }
// }
// }
int main(){
#ifndef ONLINE_JUDGE
freopen("t.in","r",stdin);
#endif
scanf("%d",&T);
while(T--){
memset(fir,0,sizeof(fir));
memset(nxt,0,sizeof(nxt));
memset(vis,0,sizeof(vis));
cnt=0;
ass=0;
S.clear();
scanf("%d",&n);
for(int i=1;i<=n-1;i++){
int a,b;
scanf("%d %d",&a,&b);
addedge(a,b);
addedge(b,a);
}
for(int i=1;i<=n;i++)
scanf("%d",&w_p[i]);
scanf("%d",&k);
if(k==2||k==3)
scanf("%d",&s);
for(int i=1;i<=n;i++)
w_p[i]=SG(w_p[i]);
root=0;
Siz=n;
findroot(1,0);
divide(root);
if(ass)
printf("Mutalisk ride face how to lose?\n");
else
printf("The commentary cannot go on!\n");
}
return 0;
}

P3727 曼哈顿计划E的更多相关文章

  1. Luogu P3727 曼哈顿计划E 点分治+hash

    题目: P3727曼哈顿计划E 分析: 大长题面容易给人一种不可做的错觉,但是这题考的知识点都是我们熟悉的. 稍加分析我们可以得到,我们可以把每个点当成一个单独的游戏,如果k=1,就是简单的nim游戏 ...

  2. [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)

    题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...

  3. [luoguP3729]曼哈顿计划EX

    来自FallDream的博客,未经允许,请勿转载,谢谢. 艾登拥有一个计算机网络,每一台计算机都至少有着Intel Xeon E50 v40 + 40路GTX10800Titan的恐怖配置,并由无线网 ...

  4. [Luogu3727]曼哈顿计划E

    luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...

  5. LDA( Latent Dirichlet Allocation)主题模型 学习报告

    1     问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...

  6. 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN

    第三部分 NN-ANN 70年前的逆向推演 从这部分开始,调整一下视角主要学习神经网络算法,将其与生物神经网络进行横向的比较,以窥探一二. 现在基于NN的AI应用几乎是满地都是,效果也不错,这种貌似神 ...

  7. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

  8. 蒙特·卡罗算法的Python实现

    一 背景 此算法诞生的背景是: 曼哈顿计划,有极大的计算需求. 计算机刚开始发展,最适合做计算. 蒙特卡洛算法理论基础是概率论,实际就是暴力计算逼近理想结果.正是在以上两个背景下,它刚好得到了极大的应 ...

  9. 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)

    本文是对参考资料中多篇关于sampling的内容进行总结+搬运,方便以后自己翻阅.其实参考资料中的资料写的比我好,大家可以看一下!好东西多分享!PRML的第11章也是sampling,有时间后面写到P ...

随机推荐

  1. Latex数学公式中的空格

    http://blog.sina.com.cn/s/blog_4ddef8f80100iwwv.html 两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m ...

  2. 【转】推荐4个不错的Python自动化测试框架

    之前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试用例.假设(assumptions).脚本和技术来运行每一 ...

  3. jack welch:“你们知道了,但是我们做到了”

    一.我们发现,只要我们敢于相信自己,敢于朝着那些看似不可能的目标不懈努力,最终会如愿以偿,个人的领袖形象也将因此而确立. 二.一个领导者必须要有魄力.对我来说,这就是一个人能否领导一项业务的分水岭. ...

  4. 【Error】:svnrdump: E130003: The XML response contains invalid XML

    我这边的使用场景是在对远程服务器进行svnrdump dump操作时出现该问题,因为是对远程仓库多级子目录进行备份,结果出现错误. 在网上搜索了很多,有很多帖子是在checkout的时候出现问题,和我 ...

  5. 转:Process类的使用

    转载自:http://www.oschina.net/code/snippet_119226_6188 一.根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 ...

  6. vue:自定义指令

    <div id="app"> <div v-lang="color">{{num}}</div> <button @c ...

  7. AtCoder Beginner Contest 082 A - Round Up the Mean

    题目链接:https://abc082.contest.atcoder.jp/tasks/abc082_a Time limit : 2sec / Memory limit : 256MB Score ...

  8. <转>jmeter(九)逻辑控制器

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  9. Server Library [Apache Tomcat 7.0] unbound解决方案

    问题描述: 当在MyEclipse中导入高版本Eclipse的[Eclipse Dynamic Web]项目后,会发现其Java Build Path(选定项目->Alt+Enter即可打开Pr ...

  10. Eloquent JavaScript #13# HTTP and Forms

    索引 Notes fetch form focus Disabled fields form’s elements property 阻止提交 快速插入单词 实时统计字数 监听checkbox和rad ...