【jzoj5055】【GDOI2017模拟二试4.12】【树上路径】【点分治】
题目大意
给定一颗n个结点的无根树,树上的每个点有一个非负整数点权,定义一条路径的价值为路径上的点权和-路径的点权最大值。
给定参数p,我们想知道,有多少不同的树上简单路径,满足它的价值恰好是p的倍数。
注意:单点算作一个路径;u ≠ v时,(u,v)和(v,u)只算一次。
解题思路
直接点分即可。
code
#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LD double
#define LL long long
#define ULL unsigned long long
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define fr(i,j) for(int i=begin[j];i;i=next[i])
using namespace std;
int const mn=1e5+9,mm=2*1e5+9,inf=1e9;
int n,p,gra,top,a[mn],vis[mn],begin[mn],size[mn],to[mm],next[mm],cnt[10000000+9];LL ans;
void insert(int u,int v){to[++gra]=v;next[gra]=begin[u];begin[u]=gra;
}
void gsize(int now,int pre){size[now]=1;fr(i,now)if((!vis[to[i]])&&to[i]!=pre){gsize(to[i],now);size[now]+=size[to[i]];}
}
int groot(int now,int pre,int nsize){fr(i,now)if((!vis[to[i]])&&to[i]!=pre){int tmp=groot(to[i],now,nsize);if(tmp)return tmp;}if(size[now]>nsize/2)return now;return 0;
}
struct rec{LL sum;int max;
};
rec b[mn];
void dfs(int now,int pre,LL nsum,int nmax){b[++top].sum=nsum;b[top].max=nmax;fr(i,now)if((!vis[to[i]])&&to[i]!=pre)dfs(to[i],now,nsum+a[to[i]],max(nmax,a[to[i]]));
}
bool cmp(rec x,rec y){return x.max<y.max;
}
void calc(int now,LL nsum,int nmax,int tag,int tmp){top=0;dfs(now,0,nsum,nmax);sort(b+1,b+top+1,cmp);fo(i,1,top){ans+=tag*cnt[(b[i].sum-b[i].max)%p];cnt[((p-(b[i].sum-tmp))%p+p)%p]++;}fo(i,1,top)cnt[((p-(b[i].sum-tmp))%p+p)%p]--;
}
void solve(int now){gsize(now,0);now=groot(now,0,size[now]);calc(now,a[now],a[now],1,a[now]);vis[now]=1;fr(i,now)if(!vis[to[i]]){calc(to[i],a[now]+a[to[i]],max(a[now],a[to[i]]),-1,a[now]);solve(to[i]);}
}
int main(){//freopen("path.in","r",stdin);//freopen("path.out","w",stdout);freopen("d.in","r",stdin);freopen("d.out","w",stdout);scanf("%d%d",&n,&p);int u,v;fo(i,1,n-1){scanf("%d%d",&u,&v);insert(u,v);insert(v,u);}fo(i,1,n)scanf("%d",&a[i]);solve(1);printf("%lld\n",ans+n);return 0;
}
【jzoj5055】【GDOI2017模拟二试4.12】【树上路径】【点分治】相关推荐
- JZOJ 5050. 【GDOI2017模拟一试4.11】颜色树
Description 思源湖畔有一棵树,那是独孤玉溪最喜欢的地方. 传说中,这棵不见边际的树有N个节点,每个节点都有1片叶子,每片叶子都拥有K种颜色中的一种,独孤玉溪喜欢爬到这棵树上,沿着一条路线摘 ...
- BZOJ 5049. 【GDOI2017模拟一试4.11】腐女的生日
Description 腐女要过生日了,pty 想给腐女送礼物,但是腐女所在的教室离pty 的教室太远了,于是pty就拜托会动归和A星的djy帮忙送礼物.djy在学校建立了一个平面直角坐标系,他站在了 ...
- JZOJ 5048. 【GDOI2017模拟一试4.11】IQ测试
Description PTY进行IQ测试,测试的项目是判断一个序列是否是另外一个序列删除若干个数字之后得 到的,PTY 深知自己的IQ 低于sqrt(-1),所以他请来了智商超高的你来替他解决问题. ...
- 中医大计算机考试内容,中医医师二试考试计算机化考试系统考生操作流程说明...
2019年中医执业助理医师一年两试试点已经增加至12个,而今年的中医执业助理医师二试依旧实行的是计算机考核,那么对于江苏.湖南.广东.宁夏新试点考生和第一次参加机考的考生来说,可能不太清楚计算机考试系 ...
- easy-mock写的一个简单的模拟二页的反馈
用easy-mock写的一个简单的模拟二页的反馈,因为后端团队比较传统,所以设计的结构不太规范. 功能:每页10条,共2页,共12条记录,超出参数范围会返错误码: easy模板: {code: fun ...
- 计算机二级试题第12套,计算机等级考试二级VFP机试试题12
第十二套 一.基本操作题(共四小题,第1和2题是7分.第3和4题是8分) 1.打开数据库PROD_M及数据库设计器,其中的两个表的必要的索引已经建立, 为这两个表建立永久性联系 2.设置CATEGOR ...
- Matlab蒙特卡洛模拟二维伊辛模型相变过程
一.什么是伊辛模型 伊辛(Ising)模型是描述磁系统相变最简单的模型,但模型里自旋之间的相互作用赋予了它奇妙的特性,最有趣的就是对称性破缺.这一模型可以被推广用于研究连续的量子相变.基本粒子超弦理论 ...
- 疾风之刃鸿蒙炸裂,疾风之刃二周年版本12月1日上线_疾风之刃天武僧二觉率先开放_游戏堡...
疾风之刃二周年版本12月1日上线,二周年庆典版本登场之际,游戏也将推出全职业二次觉醒,疾风之刃天武僧二觉率先开放!接下来游戏堡小编就带大家提起看看二觉武僧: 天武僧的两个转职光音天和自在天在二次觉醒之 ...
- 模拟二:STEMA 考试选择题模拟练习试卷(中级组) 及答案 + 解题后期更新
模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...
最新文章
- 笔记-项目范围管理-确认范围与控制范围的区别
- 算法练习day8——190326(队列实现栈、栈实现队列)
- This Style does not belong to the supplied Workbook. Are you trying to assign a style from one workb
- TensorFlow:Windows下使用TensorFlow-Python版本
- android 点击热区,增大UIButton的点击热区
- 五种C语言非数值计算的常用经典排序算法
- JavaScript之实例练习(正反选、二级联动)
- 关于企业应用SAP成本管理模式与方法的一些思考
- Zabbix 5.0 监测mysql
- Atitit mtp ptp rndis midi协议的不同区别
- 从零开始研发GPS接收机连载——4、GPS模拟器数据采集验证
- python雷达信号处理,信号处理之功率谱原理与python实现
- IT项目管理规范模板及IT软件招投标模板(共367份,488M)
- R语言学习笔记之数据清洗与整理(三)
- 里恩药物警戒系统(RH-PV)介绍
- EPUB、CAJ 、PDF 格式的区别,有什么好用的安卓epub阅读器
- Toolbar中setNavigationIcon的返回图标太大,图标大小调整解决方法
- Docker学习之四:容器虚拟化网络与docker网络
- Linux的基础存储管理
- 七年北漂落幕-【文末送书】
热门文章
- 【文献阅读】Commission Fee is not Enough: A Hierarchical Reinforced Framework for Portfolio Management
- ADS Assignment of DP
- 基于python的在线音乐系统设计与实现
- 疫情期间如何做到远程监控,实现设备的“智慧把守”?
- SpringBoot、EasyPoi、Echarts 实现文档导入、出、图表显示 (饼状图、柱状图) 保姆级教程
- C#打印标签(包括二维码和一位条码)
- 南卫理公会大学计算机科学,南卫理公会大学计算机科学研究生语言及申请要求-费用-课程设置...
- android apk对遥控器支持,Android中关于APK对遥控器支持的修改
- VMWare连接外网的配置操作
- 微信小程序页面上下滚动、左右滑动(二)