点分治维护dp+连通块上新型dp思路+乘积方面进行根号dp:0922T4

首先连通块,所以点分治肯定是

Trick1 钦定选根的连通块dp

对于钦定选根的连通块dp,有一种常见思路

先对原树求其dfn序,按dfn序倒序求解

具体的,对于当前点 i i i(注意这里都是指dfn序),我们可以钦定 i i i 是否选

如果 i i i 选,就由 i + 1 i+1 i+1,也就是 i i i 的第一个儿子转移过来(因为只有他选他子树才可能被选)

如果 i i i 不选,就由 i + w i i+w_i i+wi 转移过来,因为他的儿子必然不会被选

至于 i i i i + w i i+w_i i+wi 同时选的情况,我们在 i + 1 i+1 i+1 那里已经算了

对于 i i i i + w i i+w_i i+wi 是否连通的问题,当他们的lca都被选时,则他们必然也被选,这里一定会在他们祖先那里被算到

在这里插入图片描述

Trick 2 对于乘积类dp的根号优化方法

考虑直接 d p [ x ] [ i ] dp[x][i] dp[x][i] i i i 值域过大。

但我们可以拆分 f ( x , i ) , g ( x , i ) f(x,i),g(x,i) f(x,i),g(x,i),代表已选乘积为 i i i / 还可以选乘积为 i i i 的方案数

这样状态直接压成 O ( m ) O(\sqrt m) O(m )

其实也可以用整除分块的证明进行预处理

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//mt19937 rand(time(0));
//mt19937_64 rand(time(0));
//srand(time(0));
#define N 4010
#define M 1510
#define mo (int)(1e9+7)
int n, m, i, j, k, T;
int Rt, rt, f[N][M], g[N][M]; 
int mx[N], w[N], dfn[N], tot, sum,  u, v; 
int sq, p[N], v1, v2, a[N], ans; 
vector<int>G[N]; void dfs(int x, int fa) {w[x]=mx[x]=1; for(int y : G[x]) {if(y==fa || p[y]) continue; dfs(y, x); w[x]+=w[y]; mx[x]=max(mx[x], w[y]); }mx[x]=max(mx[x], sum-w[x]); if(mx[x]<mx[rt]) rt=x; 
}void dfs2(int x, int fa) {dfn[++tot]=x;  for(int y: G[x]) if(y!=fa && !p[y]) dfs2(y, x); 
}void Add(int &a, int b) {a=(a+b)%mo; 
}void dfz(int x) {
//	printf("> %lld\n", x); int i, j, u; tot=0; dfs(x, 0); dfs2(x, 0); 
//	for(i=1; i<=tot; ++i) printf("%lld ", dfn[i]); printf("\n"); for(i=0; i<=tot+5; ++i)for(j=0; j<=sq+5; ++j) f[i][j]=g[i][j]=0; 
//	f[tot+1][1]=1; for(i=tot; i>=1; --i) {u=dfn[i]; if(a[u]>sq) Add(g[i][m/a[u]], 1); else Add(f[i][a[u]], 1); for(j=1; j<=sq; ++j) {v1=i+1; v2=i+w[u]; if(j*a[u]>sq && j*a[u]<=m) Add(g[i][m/(j*a[u])], f[v1][j]); else if(j*a[u]<=m) Add(f[i][j*a[u]], f[v1][j]); if(j>=a[u]) Add(g[i][j/a[u]], g[v1][j]); 
//			
//			
//			Add(f[i][j], f[v2][j]); Add(g[i][j], g[v2][j]); }}for(i=1; i<=sq; ++i) Add(ans, f[1][i]+g[1][i]); //	printf("# %lld : %lld\n", x, ans); dfs(x, 0); p[x]=1; for(int y : G[x]) if(!p[y]) {dfs(y, x); sum=w[y]; mx[rt=0]=1e9; dfs(y, x); dfz(rt); }
}signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);freopen("fn.in", "r", stdin);freopen("fn.out", "w", stdout);
//	T=read();
//	while(T--) {
//
//	}n=read(); m=read(); sq=sqrt(m); 
//	printf("# %lld\n", sq); for(i=1; i<=n; ++i) a[i]=read(); for(i=1; i<n; ++i) {u=read(); v=read(); G[u].pb(v); G[v].pb(u); }sum=n; mx[rt=0]=1e9; dfs(1, 0); Rt=rt; 
//	printf("%lld\n", rt); dfz(rt);printf("%lld", (ans%mo+mo)%mo); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140311.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

【智慧工地源码】智慧工地助力数字建造、智慧建造、安全建造、绿色建造

智慧工地围绕建设过程管理&#xff0c;建设项目与智能生产、科学管理建设项目信息生态系统集成在一起&#xff0c;该数据在虚拟现实环境中&#xff0c;将物联网收集的工程信息用于数据挖掘和分析&#xff0c;提供过程趋势预测和专家计划&#xff0c;实现工程建设的智能化管理&a…

[Linux]线程概念

[Linux]线程概念 文章目录 [Linux]线程概念什么是线程Linux系统下的线程实现线程是CPU调度的基本单位进程是系统分配资源的基本实体二级页表 线程的优点线程的缺点线程异常线程用途线程资源 什么是线程 线程是进程内部的一个执行分支&#xff0c;执行粒度比进程更细&#xff0…

【Java 基础篇】Java网络编程:下载进度监控实现详解

文件下载是许多应用程序的重要功能&#xff0c;而下载进度监控是提高用户体验的关键。在本文中&#xff0c;我们将详细介绍如何使用Java实现文件下载进度监控&#xff0c;以便用户可以实时了解文件下载的进度。 什么是下载进度监控 下载进度监控是一种用户界面元素或功能&…

113双周赛

题目列表 2855. 使数组成为递增数组的最少右移次数 2856. 删除数对后的最小数组长度 2857. 统计距离为 k 的点对 2858. 可以到达每一个节点的最少边反转次数 一、使数组成为递增数组的最少右移次数 这题可以直接暴力求解&#xff0c;枚举出每种右移后的数组&#xff0c;将…

什么是UWB定位技术?UWB定位的应用场景及功能介绍

说到定位我们并不陌生&#xff0c;定位技术一直与我们的生活密不可分&#xff0c;比如最常见的车辆导航。 根据使用场景&#xff0c;定位技术分为室内定位和室外定位。 室外定位主要依靠GPS&#xff0c;北斗&#xff0c;GLONASS&#xff0c;伽利略等全球卫星定位导航系统。室内…

2023年“羊城杯”网络安全大赛 决赛 AWDP [Break+Fix] Web方向题解wp 全

终于迎来了我的第一百篇文章。 这次决赛赛制是AWDP。BreakFix&#xff0c;其实就是CTFFix&#xff0c;Fix规则有点难崩。Break和Fix题目是一样的。 总结一下&#xff1a;败北&#xff0c;还是太菜了得继续修炼一下。 一、Break ezSSTI 看到是SSTI&#xff0c;焚靖直接一把梭…

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…

005-第一代光电小工具(一)

第一代光电小工具(一) 文章目录 第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot 播放音频软件截图 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 曲线、 SQLite 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 Faild to load SELinux poilcy…

VirtualBox解决VERR_SUPDRV_COMPONENT_NOT_FOUND错误

简述 最近使用VirtualBox时发现其增强功能不能用了&#xff0c;也就是不能双向拖拉文件&#xff0c;整了很久不知所以&#xff1b;看到有网友说跟新其VBoxGuestAdditions.ios文件&#xff0c;所以直接把我的VirtualBox从6.x升级到了7.x&#xff0c;然后就发生了眼前的一幕&…

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI

【C++入门指南】C如何过渡到C++?祖师爷究竟对C++做了什么?

【C入门指南】C如何过渡到C&#xff1f;祖师爷究竟对C做了什么&#xff1f; 前言一、命名空间1.1 命名空间的定义1.2 命名空间使用 二、C输入、输出2.1 std命名空间的使用惯例 三、缺省参数3.1 缺省参数的定义3.2 缺省参数分类 四、函数重载4.1 函数重载概念4.2 C支持函数重载的…

如何防止商业秘密泄露(洞察眼MIT系统商业机密防泄密解决方案)

在当今的商业环境中&#xff0c;保护公司的商业秘密是至关重要的。商业秘密可能包括独特的业务流程、客户列表、研发成果、市场策略等&#xff0c;这些都是公司的核心竞争力。一旦这些信息被泄露&#xff0c;可能会对公司的生存和发展产生重大影响。本文将探讨如何通过使用洞察…

Cortex-M3/M4堆栈

一、Cortex-M3/M4堆栈操作 Cortex-M3/M4 使用的是“向下生长的满栈”模型。堆栈指针 SP 指向最后一个被压入堆栈的 32 位数值。在下一次压栈时&#xff0c; SP 先自减 4&#xff0c; 再存入新的数值&#xff0c;如图所示为堆栈的PUSH操作。 POP 操作刚好相反&#xff1a;先从 …

针对 SAP 的增强现实技术

增强现实技术是对现实世界的一种交互式模拟。这种功能受到各种企业和制造商的欢迎&#xff0c;因为它可以减少生产停机时间、快速发现问题并维护流程&#xff0c;从而提高运营效率。许多安卓应用都在探索增强现实技术。 使用增强现实技术&#xff08;AR&#xff09;的Liquid U…

获取文件上次访问时间

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Java源码 public void testGetFileTime() {try {String string "E://test.txt";File file new File(string);Path path file.toPath();BasicFileAttributes ba…

Windows安装cuda和cudnn教程最新版(2023年9月)

文章目录 cudacudnn cuda 查看电脑的cuda最高驱动版本&#xff08;适用于N卡电脑-Nvidia&#xff09; winR打开命令行&#xff0c;输入nvidia-smi 右上角cuda -version就是目前支持的最高cuda版本&#xff0c;目前是12.2 nvidia官网下载cuda 下载地址&#xff1a;https://d…

VHOST-SCSI代码分析(1)VHOST SCSI设备模拟

VHOST SCSI设备的模拟是由QEMU和HOST共同实现的&#xff0c;QEMU模拟VHOST SCSI设备配置空间等&#xff0c;而对于虚拟机通知HOST和HOST通知虚拟机机制由HOST内核实现。 在QEMU中VHOST SCSI设备继承关系如下&#xff1a; 其它设备以及对应class_init函数和realize具现化实现与V…

uni-app 之 picker选择器

uni-app 之 picker选择器 同步滚动&#xff1a;开 uni-app 之 picker选择器 一、普通选择器 二、多列选择器 三、时间选择器 四、日期选择器 一、普通选择器 <template><view><picker change"bindPickerChange" :value"index" :range&q…