SovietPower Play With Amstar

题意:

  一棵二叉树,每次询问一条路径上的路径和,初始每个点有一个权值1,询问后权值变为0。$n \leq 10^7,m\leq10^6$

分析:

  首先树链剖分+线段树可做,$O(mlog^2)$,复杂度太大。

  然后并查集缩点,树剖求lca,$O(n+mlogn)$。可以被卡一个subtask。

  考虑我们并查集的过程中是不断往上跳,跳到相等时结束,这个点可能是lca,也可能不是,需要判断一下,考虑优化这个判断。

  二叉树的前序遍历有一个性质:两个点的lca在他们中间。于是按照这个性质就可以$O(n+m)$了。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#define Swap(l, r) l ^= r, r ^= l, l ^= r
#define fore(i, u, v) for (int i = head[u], v = e[i].to; i; i = e[i].nxt, v = e[i].to)
using namespace std;
typedef long long LL; char buf[], *p1 = buf, *p2 = buf;
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,10000000,stdin),p1==p2)?EOF:*p1++)
inline int read() {
int x=,f=;char ch=nc();for(;!isdigit(ch);ch=nc())if(ch=='-')f=-;
for(;isdigit(ch);ch=nc())x=x*+ch-'';return x*f;
} const int N = ;
int ls[N], rs[N], fa[N], pos[N], f[N], dep[N];
int Root, Index; inline void add_edge(int u,int v) {
if (v == Root || u == ) return ;
if(!ls[u]) ls[u] = v;
else rs[u] = v;
}
void dfs(int u) {
if (!u) return ;
dep[u] = dep[fa[u]] + ;
dfs(ls[u]);
pos[u] = ++Index;
dfs(rs[u]);
}
int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); }
int solve(int u,int v) {
int ans = , l = pos[u], r = pos[v]; l > r ? Swap(l, r) : l;
u = find(u), v = find(v);
while (u != v) ans ++, dep[u] > dep[v] ? u = f[u] = find(fa[u]) : v = f[v] = find(fa[v]);
if (pos[u] >= l && pos[u] <= r) ans ++, f[u] = find(fa[u]), u = find(u);
return ans;
}
int main() {
read();int opt = read(), n = read(), m = read(); Root = read();
for (int i = ; i <= n; ++i) fa[i] = read(), add_edge(fa[i], i);
dfs(Root);
for (int i = ; i <= n; ++i) f[i] = i;
int lastans = , u, v;
while (m --) {
u = read(), v = read();
u = (u ^ (lastans * opt)) % n + , v = (v ^ (lastans * opt)) % n + ;
lastans = solve(u, v);
printf("%d\n", lastans);
}
return ;
}

校内模拟赛 SovietPower Play With Amstar的更多相关文章

  1. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  2. Java实现蓝桥杯第十一届校内模拟赛

    有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...

  3. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  4. 校内模拟赛 Zbq's Music Challenge

    Zbq's Music Challenge 题意: 一个长度为n的序列,每个位置可能是1或者0,1的概率是$p_i$.对于一个序列$S$,它的得分是 $$BasicScore=A\times \sum ...

  5. 校内模拟赛 Attack's Fond Of LeTri

    Attack's Fond Of LeTri 题意: n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度.求 ...

  6. 校内模拟赛 虫洞(by NiroBC)

    题意: n个点m条边的有向图,每一天每条边存在的概率都是p,在最优策略下,询问从1到n的期望天数. 分析: dijkstra. 每次一定会优先选dp最小的后继走,如果这条边不存在,选次小的,以此类推. ...

  7. 校内模拟赛 旅行(by NiroBC)

    题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...

  8. 校内模拟赛 coin

    题意: n*m的棋盘,每个格子可能是反着的硬币,正着的硬币,没有硬币,每次可以选未选择的一行或者未选择的一列,将这一行/列的硬币取反.如果没有可选的或者硬币已经全部正面,那么游戏结束. 最后一次操作的 ...

  9. 校内模拟赛 Label

    题意: n个点m条边的无向图,有些点有权值,有些没有.边权都为正.给剩下的点标上数字,使得$\sum\limits_{(u,v)\in E}len(u,v) \times (w[u] - w[v]) ...

随机推荐

  1. Djanggo ORM操作

    Django ORM那些相关操作  一般操作 看专业的官网文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/,做专业的程序员 ...

  2. 在c/c++中调用Java方法

    JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用. 通过使用JNI可 ...

  3. 非对称加密与GPG/PGP

    最近浏览博客的时候,经常会看到博主展示出自己的公钥,于是对 GPG/PGP 产生兴趣.下面简单记录相关文章的链接,方便以后了解. 简介: 1991年,程序员Phil Zimmermann为了避开政府的 ...

  4. 50个常用sql语句 网上流行的学生选课表的例子

    50个常用sql语句 建表: --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称 ...

  5. Postgresql - jsonb_pretty & dateStyle

    1. SHOW datestyle; DateStyle ----------- ISO, MDY(1 row) INSERT INTO container VALUES ('13/01/2010') ...

  6. 2.2Python数据处理篇之---math模块的数学函数

    目录 目录 前言 (一)一览表 1.基本函数 2.对数函数 3.三角函数 4.角度的切换 5.双曲函数 6.math定义的常数 (二)实例 目录 前言 math模块是基础的python数学函数模块,是 ...

  7. tkinter学习系列(三)之Label控件

    目录 目录 前言 (一)基本用法和可选属性 ==1.基本用法== ==2.可选属性== (二)属性的具体使用 ==1.常用属性== ==2.边距与文本对齐方式== ==案例一== ==案例一的效果== ...

  8. 三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位

    对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢..... 原创不易,转载请转原文,注明出处,谢谢.   一.关于POR(Power-On ...

  9. js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)

    前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...

  10. 在Markdown中转载CSDN博客

    1.CSDN博客页面右键,点击[检查] 点击检查后,页面右侧出现html代码,如下图 2.如果需要转载全文,则在html代码下侧点击选中article_content 即可,会在代码框中自动选中art ...