题意:

  给出一棵树以及m,a,b,x0,y0。之后加m条边{(x1,LCA(x1,y1)),(x2,LCA(x2,y2))...(xm,LCA(xm,ym))}。定义z = f(0)^f(1)^...^f(n-1),其中f(i)代表删掉点i的连通块数。则xi = (axi-1+byi-1+z)%n,yi = (bxi-1+ayi-1+z)%n。求xm和ym

题解:

  维护每个点的度数。初始的点的度数即为删掉该点后的连通块数。

  第i次加边(xi,LCA(xi,yi))中xi到LCA(xi,yi)的路径上的点(除xi和LCA(xi,yi)以外)度数减1。

  每个点的父节点只有一个,用并查集维护每个点的父亲节点到其分支是否被计算过。

#include <iostream>
#include <cstdio>
using namespace std;
const int N = ;
int n, m, a, b, x, y, z;
int u, v;
int tot;
int f[N], depth[N], fa[][N], g[N];
int head[N], nxt[N<<], to[N<<];
int find(int x) {
return x==f[x]?x:f[x]=find(f[x]);
}
void dfs(int u, int pre, int d) {
fa[][u] = pre;
depth[u] = d;
int cnt = ;
for(int i = head[u]; ~i; i = nxt[i]) {
if(to[i] != pre) dfs(to[i], u, d+);
cnt++;
}
g[u] =cnt;
}
int main() {
while(~scanf("%d%d%d%d%d%d", &n, &m, &a, &b, &x, &y)) {
tot = z = ;
for(int i = ; i <= n; i++) f[i] = i, head[i] = -;
for(int i = ; i < n-; i++) {
scanf("%d%d", &u, &v);
to[++tot] = v; nxt[tot] = head[u]; head[u] = tot;
to[++tot] = u; nxt[tot] = head[v]; head[v] = tot;
}
dfs(, , );
for(int i = ; i < ; i++)
for(int j = ; j < n; j++)
fa[i+][j] = fa[i][fa[i][j]];
for(int i = ; i < n; i++) z ^= g[i];
while(m--) {
u = (a*x+b*y+z)%n;
v = (a*y+b*x+z)%n;
x = u; y = v;
if(depth[u]<depth[v]) swap(u, v);
int dep = depth[u]-depth[v];
if(dep>) {
for(int i = ; i >= ; i--) {
if(dep&(<<i)) u = fa[i][u];
}
}
for(int i = ; i >= ; i--) {
if(fa[i][u] != fa[i][v]) {
u = fa[i][u];
v = fa[i][v];
}
}
if(u!=v) v = fa[][v];
u = find(x);
while(depth[fa[][u]]>depth[v]) {
z ^= g[fa[][u]];
g[fa[][u]]--;
z ^= g[fa[][u]];
f[u] = fa[][u];
u = find(u);
}
}
printf("%d %d\n", x, y);
}
}

  

最新文章

  1. [Intel Edison开发板] 01、Edison开发板性能简述
  2. InnoDB还是MyISAM 再谈MySQL存储引擎的选择
  3. ssh远程执行命令
  4. QTableView 一列添加两个按钮
  5. CF 161B Discounts(贪心)
  6. MongoDB 3.0 新特性【转】
  7. nginx + fastDFS 设置开机自动启动
  8. Journey Of Code组组员贡献率
  9. FusionCharts属性大全
  10. C++定义自己的命名空间和头文件
  11. phpcms V9首页、列表页以及内容页调用标签
  12. Lombok 介绍
  13. 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)
  14. python小练--使用正则表达式将json解析成dict
  15. linux telnet命令
  16. 微信小程序双击事件的绑定
  17. Linux文件系统命令 umask
  18. 为什么IIS的应用池回收设置默认为1740分钟-20180720
  19. odoo 之报date&lt;form string=&#39;&#39;product lc&#39;&#39;&gt; 错误
  20. input文本框禁止修改文本&mdash;&mdash;disabled和readonly属性的作用及区别

热门文章

  1. java基础必备单词讲解 day two
  2. mybatis异常:Could not find result map ......... 问题分析及解决
  3. java.lang.UnsupportedOperationException 原因以及解决方案
  4. windows和linux上mysql的安装
  5. MyCat实现数据库与数据库之间的读写分离
  6. Linux基础知识与命令1(su passwd)
  7. P1282
  8. 初见akka-01
  9. Android stadio 工具使用
  10. &lt;&lt;程序猿健康指南&gt;&gt; 笔记