BJOI 2012 求和
https://www.luogu.org/problemnew/show/P4427
因为这个题,我交了整整两页...
题目不难,预处理+lca
一个奇坑点:预处理sum的时候,你是不能取模的,因为有可能取模之后sum值变小,而实际上不是,由于你后一步还要做减法
因此就会出锅,导致我爆零一整页正确做法是最后取模,虽然我也不知道为什么这样不会爆炸,300000 * 998244353这都死哪儿去了...
真是血一般的教训啊,取模不能乱取
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<climits> #include<vector> #include<cstdlib> #include<ctime> #include<queue> using namespace std; #define mod 998244353 #define maxn 300000 + 10 typedef long long ll; inline ll read() {ll ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){(ans *= 10) += ch - '0';ch = getchar();}return ans * op; } ll power(ll a,ll b) {ll ans = 1,res = a;while(b){if(b & 1)(ans *= res) %= mod;(res *= res) %= mod;b = b >> 1;}return ans % mod; } struct edge {ll to,next; }e[maxn << 1]; ll fir[maxn],alloc; void adde(ll u,ll v) {e[++alloc].next = fir[u];fir[u] = alloc;e[alloc].to = v;swap(u,v);e[++alloc].next = fir[u];fir[u] = alloc;e[alloc].to = v; } ll sum[maxn][60]; ll dep[maxn],f[maxn][31]; void dfs(ll u,ll fa) {dep[u] = dep[fa] + 1;f[u][0] = fa;for(int i = 1;i <= 50;i++)sum[u][i] = sum[fa][i] + power(dep[u],i);for(int i = 1;i <= 20;i++)f[u][i] = f[f[u][i - 1]][i - 1];for(int i = fir[u];i;i = e[i].next){ll v = e[i].to;if(v == fa) continue;dfs(v,u);} } ll lca(ll x,ll y) {if(dep[x] < dep[y]) swap(x,y);for(int i = 19;i >= 0;i--){if(dep[f[x][i]] >= dep[y]) x = f[x][i];if(x == y) return x;}for(int i = 19;i >= 0;i--){if(f[x][i] != f[y][i]){x = f[x][i];y = f[y][i];}}return f[x][0]; } ll n,m; int main() {n = read();for(int i = 1;i <= n - 1;i++){ll u = read(),v = read();adde(u,v);}dep[0] = -1; dfs(1,0); m = read();for(int i = 1;i <= m;i++){ll u = read(),v = read(),k = read();ll to = lca(u,v);printf("%lld\n" , ((sum[u][k] + sum[v][k]) - (sum[to][k] + sum[f[to][0]][k])) % mod);} }
转载于:https://www.cnblogs.com/LM-LBG/p/10343580.html
BJOI 2012 求和相关推荐
- BZOJ 2660 (BJOI 2012) 最多的方案
Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一 ...
- LeetCode 2012. 数组美丽值求和
文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums .对于每个下标 i(1 <= i <= nums.length - 2),nums[i] 的 美 ...
- 使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程
原文 http://www.cnblogs.com/biwork/archive/2013/05/22/3093896.html BI Work 使用 SQL Server 2012 Analysis ...
- scau 2012新生赛 G只有神知道的世界
数论水题,但是因为自己数论比较弱,而且这题也想了半个小时,所以还放上来 题意: 对于任意一个非负数N,我们定义D(N) 为N上奇数数字的和加上两倍偶数数字的和.举个例子:D(567) = 5 + 6 ...
- 报表中利用隐藏列对扩展格显示值求和
在润乾报表中,获取报表中单元格显示值的函数是disp(),然而这个函数却无法计算扩展单元格的显示值.从而无法直接对扩展个显示值求和. 在下图中,需要计算D3单元格的显示值之和. D3值为:ds1.再订 ...
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...
作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX.SSE2指令集.支持vc.gcc编译器,在Windows.Linux.Mac ...
- [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)...
作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE.AVX指令集.因使用了stdint.zintrin.ccpuid这三个模块, ...
- xmu 1254.异或求和
1254.异或求和 Time Limit: 1000 MS Memory Limit: 65536 K Total Submissions: 52 (19 users) ...
- sqlyog表添加列_如何用数据透视表求差,而不是求和?
如图 8‑43中上图所示为某商店2012年第一季度的商品销售明细表,如何利用数据透视表快速统计各商品销量与上个月的差异如图 8‑43中下图所示? 图8‑43销售报表 1.解决方案 创建数据透视表,设置 ...
最新文章
- 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)
- linux 挂载u盘
- 深度学习中各激活函数的优缺点
- MIPI DSI协议介绍
- CSDN论坛上的一道算法题
- laravel 获取最后一条sql的小函数
- RK 3399 切换以太网卡
- VB禁用CTRL +ALT + DEL(1)
- 多元高斯分布的边缘概率和条件概率
- Word和WPS插件开发总结
- 计算机软件企业的税收,2018年软件企业增值税税收政策梳理
- 硬件基础:嵌入式软件可靠性设计要注意的问题
- 移动OA办公系统为企业带来便捷办公
- 黑苹果MAC好处与坏处
- CZ880到手第一天测试,安装Windows11 To Go
- 蓝牙如何进行广播和扫描
- 统信 UOS 连接 Windows 共享打印机
- c语言用迭代法求最大公约数,用迭代法求两个数的最大公约数和最小公倍数
- android10 p20pro,客观数据告诉你华为p20 pro的拍照到底什么水平
- 名编辑电子杂志大师教程 | 名编辑电子杂志大师软件简介
热门文章
- Linux网络DNS配置反向解析与构建主从域名服务器
- 各大型邮箱smtp服务器及端口收集:
- MiniGUI编程之Helloworld(一)
- word2vec模型评估_【新书】从Word2Vec到BERT的自然语言处理嵌入进展,附下载
- oracle表空间可以迁移,Oracle 表空间迁移
- linux父设备,linux 设备模型---学习记录(二)
- golang 热插拨 插件_从零开始实现一个插件化框架(一)
- 批量生成数组_JavaScript【重温基础】13.迭代器和生成器
- 全局对象_C++全局变量初始化
- python源码只有编译成二进制_Python源码包和二进制包(包含打包过程细节讲解)...