求和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建树. 还有一种做法是单调 ...
随机推荐
- NodeJS什么都能做,为什么还要JAVA?
这张图看起来简单而且很好理解,但没尝试过,会有很多疑问. SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层? 多加一层,性能怎么样? 多加一层,前端的工 ...
- 高效法则 之 你还在用这么low的方法打开软件吗?
电脑上的诸多功能被组织成软件的形式提供给用户.聊天的有QQ/Skype,看电影的有腾讯视频/芒果TV,听音乐的有酷狗/LessDJ,做图的有PS/Sketch,写代码搞开发的各种IDE Eclipse ...
- 查询缓存及索引:MySQL系列之九
一.MySQL的架构 连接器 连接池,安全认证.线程池.连接限制.检查内存.缓存 SQL接口 DML.DDL SQL解析器,对SQL语句的权限检查.解析为二进制程序 优化器,优化访问路径 缓存cach ...
- POJ1031 Fence
题目来源:http://poj.org/problem?id=1031 题目大意: 有一个光源位于(0,0)处,一个多边形的围墙.围墙是“全黑”的,不透光也不反射光.距光源r处的光强度为I0=k/r, ...
- Vue中的指令(听博主说总结的很好)
指令[重点] 作用:简化Dom操作 参考:https://cn.vuejs.org/v2/api/#%E6%8C%87%E4%BB%A4 特点: 1.都是以v-开头 2.除了插值表达式,其它都写在标签 ...
- js 监听浏览器刷新还是关闭事件
转载大神 http://www.cnblogs.com/gavin0517/p/5827405.html
- 【ACM】吝啬的国度 - DFS (图)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- SpringMVC(二)高级应用
一.参数绑定-----集合类型 二.数据回显(例如提交表单失败了,数据没有丢失) 三.上传图片 四.json数据的交互 五.restful 支持 六.拦截器
- aspx有"记住我"的登录
客户端 <form id="form1" runat="server"> <div> 用户名:<input type=" ...
- synchronized锁——8锁
前言 多线程是Java面试中最喜欢问的问题之一,有一篇公众号推文内容很详细,推荐看看 但凡面试官考“多线程”,一定会问这10个问题! 本文中仅对synchronized关键字的加锁进行一定分析 一.标 ...