湘潭邀请赛 2018 E From Tree to Graph
2024-08-27 09:09:22
题意:
给出一棵树以及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);
}
}
最新文章
- [Intel Edison开发板] 01、Edison开发板性能简述
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- ssh远程执行命令
- QTableView 一列添加两个按钮
- CF 161B Discounts(贪心)
- MongoDB 3.0 新特性【转】
- nginx + fastDFS 设置开机自动启动
- Journey Of Code组组员贡献率
- FusionCharts属性大全
- C++定义自己的命名空间和头文件
- phpcms V9首页、列表页以及内容页调用标签
- Lombok 介绍
- 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)
- python小练--使用正则表达式将json解析成dict
- linux telnet命令
- 微信小程序双击事件的绑定
- Linux文件系统命令 umask
- 为什么IIS的应用池回收设置默认为1740分钟-20180720
- odoo 之报date<;form string=&#39;&#39;product lc&#39;&#39;>; 错误
- input文本框禁止修改文本&mdash;&mdash;disabled和readonly属性的作用及区别
热门文章
- java基础必备单词讲解 day two
- mybatis异常:Could not find result map ......... 问题分析及解决
- java.lang.UnsupportedOperationException 原因以及解决方案
- windows和linux上mysql的安装
- MyCat实现数据库与数据库之间的读写分离
- Linux基础知识与命令1(su passwd)
- P1282
- 初见akka-01
- Android stadio 工具使用
- <;<;程序猿健康指南>;>; 笔记