DTOJ3702 月读(tsukuyomi)

  • 题目
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 数据范围与提示
  • 题解

题目

题目描述

有些时候,出题人真的不想写背景(???)
总而言之,月读现在有一棵大小为NNN,树上每条边上有一个数字,月读有MMM次询问,每次询问一对(x,y)(x,y)(x,y),你需要回答从xxx到yyy的路径上的数字重新排列能否形成一个回文序列,若可行输出Yes,否则输出No
月读为了加快您的读入,每次询问的x,yx,yx,y是通过某种方式生成的,为了加快您的输出,你只需要最后输出回答Yes的个数和即可

输入格式

第一行:两个整数N,MN,MN,M
接下来N−1N-1N−1行:三个整数ui,vi,wiu_i,v_i,w_iui​,vi​,wi​​,描述一条边(ui,vi)(u_i,v_i)(ui​,vi​)与边上的数字wiw_iwi​
接下来一行A1,B1A_1,B_1A1​,B1​
MMM个询问以如下方式生成
xi=Ai%n+1,yi=Bi%n+1x_i=A_i \% n+1,y_i=B_i \% n+1xi​=Ai​%n+1,yi​=Bi​%n+1
Ai=Ai−1×666073%(109+7)A_i=A_{i-1} \times 666073 \% (10^9+7)Ai​=Ai−1​×666073%(109+7)
Bi=Bi−1×233%998244353B_i=B_{i-1} \times 233 \% 998244353Bi​=Bi−1​×233%998244353

输出格式

一行一个数字,代表回答Yes的个数

样例

样例输入

4 1
1 2 1
2 3 1
1 4 2
2 3

样例输出

1

数据范围与提示

对于此题有六个测试点:
A(101010分)N,M⩽2000N,M \leqslant 2000N,M⩽2000
B(232323分)N,M⩽105,ui=vi+1N,M \leqslant 10^5,u_i=v_i+1N,M⩽105,ui​=vi​+1
C(151515分)N,M⩽105N,M \leqslant 10^5N,M⩽105
D(151515分)N,M⩽106,wi⩽30N,M \leqslant 10^6,w_i \leqslant 30N,M⩽106,wi​⩽30
E(171717分)N,M⩽106N,M \leqslant 10^6N,M⩽106
F(202020分)N⩽106,M⩽107N \leqslant 10^6,M \leqslant 10^7N⩽106,M⩽107
对于所有的wi⩽nwi \leqslant nwi⩽n

题解

如果重新排列能形成一个回文序列的话,那么满足出现的次数是奇数的数字最多只能有一个
所以我们可以对每一种边权进行哈希赋值,和000一起存入哈希表中
接着,我们记XoriXor_iXori​为根到iii点的边权异或和
那么,如果询问的点为x,yx,yx,y,只要fx∧fyf_x\land f_yfx​∧fy​在哈希表里出现过,回答就是YesYesYes
注意:如果你在DTOJ上提交,建议你不要使用C++11(NOI),使用C++11,否则可能会超时
附上代码:

#include<cstdio>
int n,m,Tot,tot,cnt,Head[1000010],Nxt[1000010],head[1000010],to[2000010],ver[2000010],nxt[2000010],dfn[1000010];
unsigned long long POW[1000010],pow[2000010],Ver[1000010];
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;
}
void Add(unsigned long long x)
{int y=x%1000007;Nxt[++Tot]=Head[y],Head[y]=Tot,Ver[Tot]=x;
}
int Find(unsigned long long x)
{int y=x%1000007;for(int i=Head[y];i;i=Nxt[i]) if(Ver[i]==x) return 1;return 0;
}
void add(int u,int v,int w)
{nxt[++tot]=head[u],head[u]=tot,to[tot]=v,ver[tot]=w;
}
void dfs(int x,int fa,unsigned long long Pow)
{dfn[x]=++cnt,pow[cnt]=Pow;for(int i=head[x];i;i=nxt[i]) if(to[i]!=fa) dfs(to[i],x,POW[ver[i]]),pow[++cnt]=POW[ver[i]];
}
int main()
{n=read(),m=read(),POW[0]=1,Add(0);for(int i=1;i<=n;i++) POW[i]=POW[i-1]*793999,Add(POW[i]);for(int i=1,u,v,w;i<n;i++) u=read(),v=read(),w=read(),add(u,v,w),add(v,u,w);dfs(1,0,(unsigned long long)0);for(int i=2;i<=cnt;i++) pow[i]^=pow[i-1];int a,b,ans=0;a=read(),b=read();for(int i=1,x,y;i<=m;i++)x=a%n+1,y=b%n+1,a=666073ll*a%1000000007,b=233ll*b%998244353,ans+=Find(pow[dfn[x]]^pow[dfn[y]]);printf("%d",ans);
}

DTOJ3702 月读(tsukuyomi)相关推荐

  1. DTOJ #3702. 月读(tsukuyomi)

    [题目描述] 总而言之,月读现在有一棵大小为 $N$  ,树上每条边上有一个数字,月读有 $M$  次询问,每次询问一对 $(x,y)$  ,你需要回答从 $x$  到 $y$  的路径上的数字重新排 ...

  2. 月读の自动读取 根据注释解析列名和字典

    为什么80%的码农都做不了架构师?>>>    在使用时Eova下拉框时,需要编写表达式来指定下拉项的数据来源.一般下拉框都是查字典值,比如常用的状态.性别.类型...... 新增一 ...

  3. 需要天天读月月读年年读的书

    1,数学基础 2,计算理论导引 3,Random Graphs 4,模式分类 5,计算机图形学的算法基础 6,计算几何--C语言描述 7,编译原理 8,应用随机过程 9,计算机系统 10,Comput ...

  4. 永远不要去依赖别人_【月读】永远不要太过于依赖别人

    01 最近看了一部电影,一个极具绘画天分的少女因为爱情放弃了自己成为专业画家的梦想,28岁的她,不工作,全然依赖着她的男友生活,然而在一起10年的男友却迟迟不提结婚的事,其实男友并不宠溺依赖自己的女人 ...

  5. 回顾 2018,展望 2019

    1. 概述 今天是 2019 年第一天,趁着元旦 3 天假期时间,对即将过去的这一年做个总结回顾,看下这一年得到了什么,失去了什么,并对来年做个新的规划,看下需要采取哪些措施提升自己. 2. 2018 ...

  6. 利用JS将页面指定部分存为HTML页

    很简单的一个功能..项目中一处地方因为按月读的数据可能会需要保存下来,以供日后查看.. 开始想的是导出excel,看了看觉得还不如直接存一个html页下来.决定了就做.. 方法有两个: 1,生成静态页 ...

  7. 2022年的几个小目标

    2022年的几个小目标 1, 希望能在苏州做一个长期SAP项目. 只要是在苏州,任何项目都可以,最好是4月份开始能在苏州做项目到年底甚至更长时间.不管是global rollout,还是加班无底线无节 ...

  8. 2011 总结 2012 计划

    2011回望 1. 对于专业知识方面,或许是井底之蛙,感觉自己积累了比较多的照片处理实现技术. 2. 开始从事ios平台软件开发.主要做照片处理,目前ipad上的app在摄影类排行前六.iphone上 ...

  9. 50岁,他希望自己还可以写代码

    5月12日,以"高可用架构的技术变迁与演进"为主题,"云片技术开放日"在北京中关村创业大街氪空间顺利举行.本次活动邀请了360SRE工程师李冬.饿了么研发经理谭 ...

最新文章

  1. 前瞻:在 Java 16 中会带来哪些新特性?
  2. 批量读入一个文件夹中文件的数据操作实例
  3. jtree和mysql_java 已经获取某个mysql数据库的所有表名 创建JTree
  4. oracle hcm 发展,甲骨文发布Oracle HCM Cloud云服务 呈现三大亮点
  5. 关于线程堆栈大小的注意事项-转
  6. openwrt源码分析_编译个性化的OPENWRT固件(openWRT源码修改)
  7. 《阿里铁军》的读后感范文3700字
  8. 2017 寒假作业 (一) 随笔
  9. CSDN博客写作方法
  10. Nessus8.15安装不限IP(win10)
  11. RabbitMQ了解——>安装——>入门
  12. [js]javascript实现多个json对象及列表的美化,容错非法json
  13. 单选按钮html图片,js实现的 图片单选按钮效果
  14. Yosimite 系统 “发生意外错误(错误代码-50)” (记一次macbook pro(mid2012) 自主维修排错经历)...
  15. js整体缩小网页_js实现整体缩放页面适配移动端
  16. ubuntu使用清华源pip安装pytorch
  17. 2021年全球与中国3D和虚拟现实行业市场规模及发展前景分析
  18. 【轻微课学画笔记】关于绘画中的一点透视
  19. java线程的任务的三种创建方式,严格地说,就一种,就是如何重写Runnable接口的run()方法
  20. http://ask.dcloud.net.cn/question/11695 nativeUI的使用(移动的)

热门文章

  1. 阿里最新股权曝光:软银持股23.9% 蔡崇信持股1.4%
  2. hp打印机_smart tank 510 series
  3. 解决Notepad++ Plugin Manager无法加载插件的方法
  4. 程序员职业生涯规划必读的十本书
  5. DTC管理DTB和DTS
  6. 浅谈滤波中Q和R的调整——KF第三篇笔记
  7. Android4.4开机向导
  8. 渗透信息收集 子域名查询
  9. HTML中option和input的区别,option
  10. 单片机编程软件很简单(23),keil单片机编程软件调试stm32