2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G Xor lca+暴力

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B题: 题意: 询问硬币K次,正面朝上次数为偶数。 思路: 这位大佬说的很好 -> 传送门 那么这道题目就变成了一个求概率的问题。 很容易得到一个公式P=C(k,n)*  p^n  *(1-p)^(k-n); N的值从0-最大小于K的偶数。这样我们只需要求和就可以。 分母恒为p^n,但这个式子中的分子组合数太大,简单处理必然有问题。 现在 阅读详情


题目链接:https://nanti.jisuanke.com/t/17120

题意:给你一棵树,每个点都有权值,q次询问,每次询问给你a,b,k,问从点a到点b每隔k步的异或和是多少。

思路:现场没敢打,复杂度怎么算都不对。。。后来别人说可以1的情况lca其他暴力,我就试了一下,一开始是TLE,然后我各种迷之优化确实可以过。。。。走k步这里我是用了倍增的数组然后用logk的复杂度走k步。。。然后没用memset。。或者加个输入挂我试过也可以过。最后我还有一步没有优化的就是lca没用rmq,直接用的倍增,已经码得够多了不想码rmq了。下面给代码:

#pragma comment(linker, "/STACK:102400000,102400000") 
#include<iostream>  
#include<cmath>  
#include<queue>  
#include<cstdio>  
#include<queue>  
#include<algorithm>  
#include<cstring>  
#include<string>  
#include<utility>
#include<set>
#include<map>
#include<stack>
#include<vector>
#define maxn 50005
#define inf  0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long LL;
const double eps = 1e-8;
const int mod = 1e9 + 7;
const int MAXN = 100005;
const int M = 20;
struct node{
	int v, value, next;
}p[maxn << 1];
int len, head[maxn], dis[maxn], depth[maxn], n, m, father[maxn][25], a[maxn], b[maxn];
void addedge(int u, int v){
	p[len].v = v;
	p[len].next = head[u];
	head[u] = len++;
}
void dfs(int x, int fa){
	father[x][0] = fa;
	b[x] = b[fa] ^ a[x];
	for (int i = head[x]; ~i; i = p[i].next){
		if (p[i].v == fa)
			continue;
		depth[p[i].v] = depth[x] + 1;
		dfs(p[i].v, x);
	}
}
void presolve(){
	dis[1] = depth[1] = 0;
	dfs(1, 0);
	for (int i = 1; i < M; i++)
		for (int j = 1; j <= n; j++)
			father[j][i] = father[father[j][i - 1]][i - 1];
}
int lca(int x, int y){
	if (depth[x] != depth[y]){
		if (depth[x] > depth[y])
			swap(x, y);
		int distant = depth[y] - depth[x];
		for (int i = 0; i < M; i++){
			if (distant&(1 << i))
				y = father[y][i];
		}
	}
	if (x == y)
		return x;
	for (int i = M; i >= 0; i--){
		if (father[x][i] != father[y][i]){
			x = father[x][i];
			y = father[y][i];
		}
	}
	return father[x][0];
}
int find(int x, int k){
	int now = x, tmp = 0;
	while (k){
		if (k & 1)
			now = father[now][tmp];
		k >>= 1;
		tmp++;
	}
	return now;
}
int query(int x, int y, int k){
	if (k == 1)
		return b[x] ^ b[y] ^ a[lca(x, y)];
	else{
		int nowlca = lca(x, y);
		int now = x;
		int ans = 0;
		while (1){
			ans ^= a[now];
			if (depth[now] - k < depth[nowlca])
				break;
			now = find(now, k);
		}
		int ed = depth[nowlca] + k - depth[now] + depth[nowlca];
		if (ed <= depth[y]){
			int tmp = depth[y] - ed;
			now = find(y, tmp%k);
			while (1){
				ans ^= a[now];
				if (depth[now] - k < ed)
					break;
				now = find(now, k);
			}
		}
		return ans;
	}
}
int main(){
	int q;
	while (~scanf("%d%d", &n, &q)){
		for (int i = 1; i <= n; i++)
			head[i] = -1;
		for (int i = 1; i < n; i++){
			int u, v;
			scanf("%d%d", &u, &v);
			addedge(u, v);
			addedge(v, u);
		}
		for (int i = 1; i <= n; i++)
			scanf("%d", &a[i]);
		presolve();
		while (q--){
			int u, v, k;
			scanf("%d%d%d", &u, &v, &k);
			printf("%d\n", query(u, v, k));
		}
	}
}


10种电阻综合对比——《器件手册--电阻》 可变电阻在电子设备中也有很多用途,如在收音机的音量调节电路中,通过旋转可变电阻的旋钮来改变电路中的电阻值,从而改变通过扬声器的电流,实现音量的调节。根据电阻定律,电阻R = ρ(L/S),其中ρ是导体材料的电阻率,L是导体的长度,S是导体的横截面积。比如,同样材料制成的两根电线,粗的电线电阻比细的电线电阻小,长的电线电阻比短的电线电阻大。电流采样电阻的工作原理基于欧姆定律,即电阻两端的电压与通过电阻的电流成正比,公式为 I = V/R,其中 I是电流,V是电阻两端的电压,R 是电阻值。 阅读详情

相关推荐

从IMU数据到精准定位:手把手推导ESKF中的四元数运动学与误差状态方程

本文详细介绍了如何从IMU数据推导ESKF中的四元数运动学与误差状态方程,实现精准定位。通过分析误差状态卡尔曼滤波器的优势、四元数表示的必要性,以及IMU测量模型和运动学基础,提供了完整的数学推导和实现要点。适合机器人定位和自动驾驶领域的算法工程师参考,帮助优化导航系统性能。

weixin_30271335的博客 680

树上三角形

Description给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形。同时还支持单点修改。Input第一行两个整数n、q表示树的点数和操作数 第二行n个整数表示n个点的点权 以下n-1行,每行2个整数a、b,表示a是b的父亲(以1为根的情况下) 以下q行,每行3个整数t、a、b 若t=0,则询问(a,b) 若t=

wang_sj的博客 371

SAP-PM设备模块-PM主数据之功能位置

SAP-PM模块学习

TRUIXIANG的博客 5137

2017 ACM-ICPC 亚洲区(西安赛区)网络赛

A. Tree题库链接【并查集+树上dfs】 (把每条路径先拆开拆成u->lca和lca->v(去掉lca),然后在树上dfs,回溯的时候把儿子挂到当前节点/带权并查集维护路径乘积) B. Coin题库链接(√)【二项分布计算概率+乘法逆元+组合数学】 【题意】:一枚硬币,投一次正面朝上概率为q/p, 求投k次,正面朝上的次数为偶数...

weixin_33695450的博客 219

阿里云Windows服务器部署网站全流程:从IIS配置到安全上线

Web服务器是承载网站应用、处理HTTP请求的核心软件。其工作原理是监听特定网络端口,接收客户端请求,并返回相应的网页、文件或动态生成的内容。在Windows Server环境中,IIS(Internet Information Services)作为微软官方Web服务器,凭借其与操作系统深度集成、图形化管理界面和对ASP.NET等微软技术栈的良好支持,成为许多开发者和运维人员的首选。其技术价值在于提供了稳定、可扩展的托管平台,支持从简单的静态网站到复杂的企业级Web应用。在云服务器普及的今天,将IIS部署

weixin_33552698的博客 327

基于Simulink的发动机管理系统中的自适应增压控制系统设计

通过上述详细设计步骤,我们成功开发了一个基于Simulink的自适应增压控制系统。该系统不仅能够实时监测和预测发动机的运行状态,动态调整增压压力目标值,还具备实时监控、故障诊断和保护功能,确保系统的安全性和可靠性。此外,通过仿真实验和硬件在环测试,我们验证了系统的性能,并对其进行了优化,使其能够更好地满足实际应用需求。这个项目展示了如何利用MATLAB/Simulink的强大功能,结合控制理论和工程实践,开发出高效、可靠的自适应增压控制系统。

MHD0815的博客 221

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 93

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor(LCA+K级父亲暴力卡过)

题目链接:2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor 题意: 给你一棵有n个节点的树,然后有Q个询问,每次询问给出两个点x,y,k。将x->y路径上经过的点放进一个数组a里,将询问[0],a[k],a[2*k],a[m*k]的值异或起来的值为多少。 题解: 预处理lca和k=1的答案,k>1的用倍增暴力往上跳,然后就完了,不过有点慢,需要加个读入挂才...

weixin_30872867的博客 173

基于MATLAB编程的LSTM的时间序列预测

时间序列预测,回归分析,LSTM详细原理

abc991835105的博客 360

手把手教你安装 OpenClaw 小龙虾(MAC安装教程),一次成功不踩坑

本文详细介绍了在Mac上安装OpenClaw的完整流程。主要内容包括:1)准备工作(磁盘空间、网络环境、终端工具);2)安装Homebrew包管理器及常见问题解决;3)安装Node.js 22+版本(环境核心);4)Git安装与验证;5)OpenClaw项目克隆、依赖安装及运行配置;6)大模型配置方法(以MiniMax为例)。文章提供了详细的命令行操作步骤和常见错误解决方案,特别强调了网络环境要求和Apple Silicon芯片的原生支持注意事项。最后展示了验证配置成功的方法和资源获取渠道。

Chengbei11的博客 6340

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

There is a tree with nn nodes. For each node, there is an integer value a_ia​i​​, (1 \le a_i \le 1,000,000,0001≤a​i​​≤1,000,000,000 for 1 \le i \le n1≤i≤n). There is qq queries which are d

山科小菜鸡 609

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的危险物品检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

随着公共安全需求的日益增长,危险物品检测技术在社会安防、交通安检等领域发挥着重要作用。本文介绍了一个基于YOLO系列深度学习框架的危险物品检测系统,集成了YOLOv8、YOLOv7、YOLOv6和YOLOv5四种先进的物体检测算法。系统采用PySide6开发了用户友好的图形界面,提供了完整的训练代码、预训练模型和数据集构建方案。实验结果表明,该系统在危险物品检测任务上实现了高精度和高实时性,为实际应用提供了可靠的技术支持。

YOLO 156

2024年Linux 错误代码含义 Linux Error Code_linux err code,2024年最新程序员翻身之路

大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

2401_84973144的博客 1178

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Xor

题意: 给出树的u,v节点询问每隔K个取一个数字异或。 思路: 是卡过去的。。竟然没TLE。 找U点和V点的LCA,之后从U点先向上用ST算法找到第K个祖先,依次类推。 之后再V点再重新处理向上找。注意在找完U后,可能LCA并不是K的位置。因此V点的起始位置要特判 #include using namespace std; #define rank Rank #define pb pus

GameRoad 1778

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F

f(cos(x))=cos(n∗x) holds for all xxx. Given two integers nnn and mmm, you need to calculate the coefficient of xmx^mx​m​​ in f(x)f(x)f(x), modulo 998244353998244353998244353. Input Format

Kona的博客 601

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 I. Barty's Computer(哈希||字典树)

题意:一共Q次操作,操作有两种: 1 str : 表示增加一个字符串str(长度一定是偶数) 2 a b c d : 询问有多少个字符串满足str = a + s1 + b + c + s2 + d, 且|a|+|s1|+|b| = |c|+|s2|+|d|, s1, s2可以是任意字符串,空的也可以。 Q 思路:因为要求|a|+|s1|+|b| = |c|+|s2|+|d|,

CillyB的博客 778

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Sum

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Sum 构造题 先上代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; int t; string x; string ans; int main() { ios::sync_with_stdio(false); cin.tie...

稻云麦花的博客 292

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin

略略略

Bule-Zst的博客 653

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin (概率公式+快速幂)

题意:一枚不均匀的硬币,正面向上的概率是q/p,问抛k次之后向上的次数为偶数的概率是多少。 输出的概率是整数,是把概率变成分数取模(逆元)得到的。 思路: 度娘神了,下面的例子正好可以用于本题,把最后的结果化成一个分数的形式就可以快速幂了。 #include int MOD=1e9+7; using namespace std; typedef long long LL;

protecteyesight的博客 384

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor [LCA+分块]

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor [LCA+分块]

ACTerminate的博客 1110

BZOJ 4017&&2017 icpc 西安G 区间异或和

传送门 第一个问题,一堆0和1,求所有区间的异或的和 第二个问题,一堆0和1,求所有区间的和的异或 令xor(i)表示前i项的异或值,xor(l,r)表示第l项到第r项的异或值,那么xor(l,r)=xor(r)⊕xor(l−1)。  考虑xor(l,r)的二进制第k位是1的可能情况,当且仅当xor(r)和xor(l−1)的二进制第k位不同。  那么我们可以固

twh233的算法blog 635

2017年icpc西安区域赛G题

题意:就是给你一些区间,每次有q个询问,每次询问一个区间的所有子区间的抑或和,数据范围都是100000。 思路:首先求一下抑或和前缀,然后你会发现对于一个区间的最后结果就是区间选两个位置的数抑或在一起,考虑拆位,抑或就是这一为的数字不同的时候贡献为1,然后对于每一位对该区间的贡献就是这一位在该区间0的个数和1的个数乘在一起,当然还要考虑比l-1这个数字,这样保证边界是可以取到的,我首先想的思路是...

dongdongdong122的博客 640
上一篇: hdu 6194 string string string 后缀数组+rmq+容斥
下一篇: hdu4777 Rabbit Kingdom (离线处理、互斥)
overload1997
博客等级 码龄11年 328粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值