求和VII
问题 K: 求和VII
时间限制: 2 Sec 内存限制: 256 MB
提交: 422 解决: 53
[提交] [状态] [讨论版] [命题人:admin]
题目描述
输入
之后n−1行每行两个空格隔开的正整数i,j,表示树上的一条连接点i和点j的边。
之后一行一个正整数m,表示询问的数量。
之后每行三个空格隔开的正整数i,j,k,表示询问从点i到点j的路径上所有节点深度的k次方和。由于这个结果可能非常大,输出其对998244353取模的结果。
树的节点从1开始标号,其中1号节点为树的根。
输出
样例输入
5
1 2
1 3
2 4
2 5
2
1 4 5
5 4 45
样例输出
33
503245989
提示
以下用d(i)表示第i个节点的深度。
对于样例中的树,有d(1)=0,d(2)=1,d(3)=1,d(4)=2,d(5)=2。
因此第一个询问答案为(25+15+05) mod 998244353=33,第二个询问答案为(245+145+245) mod 998244353=503245989。
对于30%的数据,1≤n,m≤100;
对于60%的数据,1≤n,m≤1000;
对于100%的数据,1≤n,m≤300000,1≤k≤50。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
const int mod=;
vector<int> a[];
int fa[],b[maxn],n,k;
ll sum[maxn][],ans;
queue<int> rec;
void init()//预处理每个点的1-50次方
{
for(int i=; i<=n; i++)
{
for(int j=; j<=; j++)
{
if(j==) sum[i][j]=b[i];
else sum[i][j]=sum[i][j-]*b[i]%mod;
}
}
}
void digui(int r,int t)//关键部分,递归求路径所有点的k次方
{
if(b[r]<b[t])
{
ans=(ans+sum[t][k])%mod;
digui(r,fa[t]);
}
else if(b[r]>b[t])
{
ans=(ans+sum[r][k])%mod;
digui(fa[r],t);
}
else if(b[r]==b[t]&&fa[r]==fa[t]&&r!=t)
{
ans=(ans+sum[r][k])%mod;
ans=(ans+sum[t][k])%mod;
ans=(ans+sum[fa[r]][k])%mod;
return ;
}
else if(r==t)
{
ans=(ans+sum[r][k])%mod;
return ;
}
else if(b[r]==b[t]&&fa[r]!=fa[t])
{
ans=(ans+sum[r][k])%mod;
ans=(ans+sum[t][k])%mod;
digui(fa[r],fa[t]);
}
}
int read()//读入挂,输入有点多
{
int x=,f=;
char c=getchar();
while((c<'' || c>'') && c!=EOF)
{
if(c=='-') f=-;
c=getchar();
}
while((c<='' && c>='') && c!=EOF)
{
x=x*+c-'';
c=getchar();
}
return x*f;
}
void bfs(int x)//bfs求深度
{
for(int i=; i<a[x].size(); i++)
{
if(b[a[x][i]]==&&a[x][i]!=)
{
fa[a[x][i]]=x;//顺便记录一下父节点
b[a[x][i]]=b[x]+;
rec.push(a[x][i]);
} }
}
int main()
{
n=read();
fa[]=;//attention!
int p,q,cnt=,T,st,en;
for(int i=; i<n; i++)//vector建边
{
p=read();
q=read();
a[p].push_back(q);
a[q].push_back(p);
}
rec.push();
b[]=;//attention!
while(cnt>)
{
p=rec.front();
bfs(p);
rec.pop();
cnt=rec.size();
}
init();
T=read();
while(T--)
{
st=read();
en=read();
k=read();
ans=;
digui(st,en);
printf("%lld\n",ans);
}
return ;
}
求和VII的更多相关文章
- 【LCA】求和VII @北京OI2018
目录 求和VII PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE 求和VII PROBLEM 时间限制: 2 Sec 内存限制: 256 MB 题目描述 m ...
- Java程序:从命令行接收多个数字,求和并输出结果
一.设计思想:由于命令行接收的是字符串类型,因此应先将字符串类型转化为整型或其他字符型,然后利用for循环求和并输出结果 二.程序流程图: 三.源程序代码: //王荣荣 2016/9/23 ...
- Java之递归求和的两张方法
方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...
- EXCEL中对1个单元格中多个数字求和
如A1=3779.3759.3769.3781.3750,A2对A1中4个数字求和怎么求!请高手赐教! 方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 方法二 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- 从sum()求和引发的思考
sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i ...
- //给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和
//给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main() { ,sum1; ]={,- ...
- Ajax中get请求和post请求
我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1 ...
- POJ 2823 Sliding Window 线段树区间求和问题
题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...
随机推荐
- bzoj4873: [Shoi2017]寿司餐厅(最小割)
传送门 大佬们是怎么一眼看出这是一个最大权闭合子图的……大佬好强->这里 1.把所有区间$(i,j)$看成一个点,如果权值大于0,则从$S$向他连边,容量为权值,否则从它向$T$连边,容量为权值 ...
- layui的tree和form并没有冲突!无限级tree下拉列表和select下拉列表同一页使用!
在昨天写的随笔中: layui的tree和form同时引用出现冲突的粗略解决办法 https://www.cnblogs.com/xwma/p/10900975.html 提出有冲突,今天在开发中发现 ...
- jQuery easyUI id选择器 类选择器 标签选择器 属性选择器 及DOM对象和jQuery相互之间的转换
首先导入js文件 <%@ page language="java" contentType="text/html; charset=UTF-8" page ...
- kali源
apt源: #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://m ...
- Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍
一.Retina显示屏简介 retina:一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由1个变为多个,如在同样带下的屏幕上,苹果设备的retina显示屏中,像素点1个变为4个. reti ...
- Python之PIP安装
Python有两个著名的包管理工具easy_install.py和pip.Python2.7的安装包中自带了easy_install.py,而pip需要手动安装.而在Python3.5之后都是默认安装 ...
- CentOS 7: ping Name or service not known
解决方法 cd到/etc/sysconfig/network-scripts/ 修改ifcfg-*(*代表的内容可通过ifconfig查看)中的ONBOOT=yes reboot ifcfg-ens3 ...
- jdk代理
接口: public interface IUserService { public void saveUser(String username,String password); public vo ...
- 5 - ByteBuf-替换ByteBuffer-字节操作
a). 容量可按需增长,类似(StringBuilder) b). 读写模式之间不需要flip切换 c). 读和写使用不同的索引-writerIndex/readerIndex d). 支持方法的链式 ...
- Angular8稳定版修改概述
在今天早些时候Angular团队发布了8.0.0稳定版.其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能.下面是我对8.0.0一些新功能的简单介 ...