来源:牛客网:

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

给你一棵树,最开始点权为0,每次将与一个点x树上距离<=1的所有点点权+1,之后询问这些点修改后的点权和.

输入描述:
第一行两个数n和m
第二行n-1个数,第i个数fa[i + 1]表示i + 1点的父亲编号,保证fa[i + 1]<i + 1
第三行m个数,每个数x依次表示这次操作的点是x
输出描述:
输出一个数,即这m次操作的答案的hash值
如果是第i次操作,这次操作结果为ans,则这个hash值加上
i * ans
输出hash值对19260817取模的结果
示例1
输入
复制

6 3
1 1 2 3 3
1 2 3

输出
复制

34

示例2
输入
复制

6 10
1 1 2 3 3
1 4 6 5 2 3 3 3 3 3

输出
复制

869

备注:
n <= 100000
m <= 10000000

题解:

吐槽一下,题意说的不明确,搞的我一阵子以为自己读错了
hash值+=i*ans,而ans等于点权+1后,与点x树上距离<=1的所有点权和
样例中最后答案就是:3 * 1+5 * 2+7 * 3=34
根据题意,当影响一个点x后,x本身,x的父亲,x的儿子,都会受到影响
int fa[x];//父亲节点
int now[x],son[x],grandson[x];//分别表示当前点被操作次数,当前点的孩子节点操作次数,当前点的孙子节点操作次数
int kid[x];//x的儿子节点有多少个

为啥要用当前点的儿子和孙子节点,我是这么理解的,因为每个点的父亲节点是唯一的,一旦确定点x,其父亲节点,祖父节点都可以确定,而一个点有未知个儿子节点,所以用kid来记录儿子节点的数量。

最后计算x的贡献其实是x本身,x的父亲,x的儿子三个贡献和:
x的父亲:now[fa[x]]+son[fa[x]]+now[fa[fa[x]]]
x的父亲节点的点权受x的父亲节点本身,x节点以及x的父亲的父亲节点
x本身:now[fa[x]]+now[x]+son[x]
x的孩子:kid[x]*now[x]+son[x]+grandson[x]

代码:

代码只过了70%,我也没找到哪里错了,愁。。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define maxn 10000008
const int mod=19260817;
typedef long long ll;
using namespace std;
int fa[maxn];
int now[maxn],son[maxn],grandson[maxn];
int kid[maxn];
int main(){int n,m;cin>>n>>m;for(int i=2;i<=n;i++){int x;cin>>x;fa[i]=x;kid[x]++;}ll sum=0;for(int i=1;i<=m;i++){int x;cin>>x;now[x]=(now[x]+1)%mod;if(fa[x])son[fa[x]]++;if(fa[fa[x]])grandson[fa[fa[x]]]++;int f=(now[fa[x]]+son[fa[x]]+now[fa[fa[x]]])%mod;int m=(now[fa[x]]+now[x]+son[x])%mod;int s=(kid[x]*now[x]%mod+son[x]+grandson[x])%mod;ll ans=(f+m+s)%mod;sum=(sum+ans*i)%mod;} cout<<sum%mod;return 0;
}

【每日一题】7月16日题目精讲—点权和相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 牛客网【每日一题】4月16日题目精讲 逆序对

    文章目录 题目描述 题解: 代码 传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format:%lld 题目描述 求所 ...

  3. 【每日一题】8月28日题目精讲 编号

    [每日一题]8月28日题目精讲 编号 链接:https://ac.nowcoder.com/acm/problem/19925 来源:牛客网 题目描述 你需要给一批商品编号,其中每个编号都是一个7位1 ...

  4. 【每日一题】7月17日题目精讲—BOWL 碗的叠放

    [每日一题]7月17日题目精讲-BOWL 碗的叠放 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  5. 【每日一题】7月15日题目精讲—生日快乐

    [每日一题]7月15日题目精讲-生日快乐 [SCOI2009]生日快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO For ...

  6. 【每日一题】7月13日题目精讲—Kingdom

    [每日一题]7月13日题目精讲-Kingdom 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bi ...

  7. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  8. 【每日一题】5月7日题目精讲 「火」皇家烈焰

    链接: 「火」皇家烈焰 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: % ...

  9. 牛客网【每日一题】4月14日题目精讲 Xorto

    文章目录 题目描述 题解: 代码: 扩展 传送 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format:%lld 题目描述 ...

最新文章

  1. 线程的CloseHandle和WaitForSingleObject
  2. 计算二叉排序树的平均查找长度
  3. AJAX-nodemon自动重启工具安装
  4. Java第八天听课总结--jar 包的使用(1)
  5. 2018.11.16 长难句4
  6. [浪风推荐]php的memcache应用入门教程
  7. 得罪前女友到底有多可怕?
  8. (转)使用IDEA将普通MAVEN项目转为WEB项目
  9. jcache_窥探JCache API(JSR 107)
  10. linux下怎么查看程序异常,linux程序莫名异常怎么查
  11. 机器学习中树模型算法总结之 决策树(下)
  12. 痛苦并愉快的被洗着_品牌洗脑
  13. matlab whos命令
  14. 批量查看域用户登录计算机信息
  15. GARFIELD@05-01-2005
  16. Error running ‘x‘: Command line is too long. Shorten command line for x or also for Application
  17. android打飞机游戏、MVP句子迷App、悬浮窗、RxJava+Retrofit、加载动画、定制计划App等源码
  18. 网友发现Q版西游:唐僧师徒脸谱上50元人民币
  19. 宁皓网 react native 视频教程 ECMAScript6
  20. - 模块“VPMC“启动失败,未能启动虚拟机?

热门文章

  1. 如果有人问你什么是大数据?不妨说说这10个典型的大数据案例
  2. delphi 关闭时缩小到托盘_delphi 实现最小化系统托盘
  3. 索尼服务器维护时间,索尼云服务器
  4. linux连接教程视频,[原创]linux视频教程之连接
  5. 做流向图_各类型供热暖系统图大全,一饱眼福!
  6. pc模式 华为mate30_华为mate30与电脑连不上怎么回事
  7. python根据列表绘制柱状图_python把一个列表画柱状图
  8. win10 mysql my.cnf_MySQL配置文件无法修改的解决方法(Win10)
  9. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
  10. [SpringSecurity]基本原理_过滤器加载过程