点分治问题 ----------- HDU4812 D Tree [点分治 + 乘法逆元]

该博客主要探讨了一种解决树上路径权值乘积模特定值问题的算法。通过数学公式推导,利用点分治的方法,找到使得路径权值乘积模1e6+3等于给定值k的路径。博主指出,在更新子树大小时,使用特定的节点存储方式可以避免超时错误。并提供了完整的C++代码实现,包括点分治、快速幂运算以及字典序最小路径查找等关键步骤。在处理多组数据时,注意优化初始化过程,只在需要时初始化对应模数的最小节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接


题目大意:

给你一颗树,树上节点有个权值 a i a_i ai,现在问你这颗树上是否存在一条路径这个路径上面权值的乘积模1e6+3等于k。
如果有多组答案输出字典序最小的答案


解题思路:

1.首先我们知道
a × b % m o d = k a\times b\%mod=k a×b%mod=k
a = ( k × i n v [ b ] ) a=(k\times inv[b]) a=(k×inv[b])
2.知道这个公式后我们就可以直接点分治了
为了字典序最小,我们要把每次模数对应的最小的结点存下面,但是不能每次都暴力初始化,用到那个数值才初始化哪个。
3.点分每次更新子树大小的时候
now_node = siz[it] > siz[u] ? now_node - siz[it] : siz[u];
会TLE!!!!!


代码:

#pragma comment(linker,"/STACK:102400000,102400000")
#pragma GCC optimize(2)
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
const int mod = 1e6 + 3;
vector<int> G[maxn];
int N, K, val[maxn];
//..................
int root, Mx, now_node;
int max_son[maxn], siz[maxn];
bool vis[maxn];
ll qmi(ll a, ll b) {
	ll res = 1;
	while(b) {
		if(b & 1) res = (a * res) % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return res;
}
void getroot(int u, int fa) {
   siz[u] = 1;
   max_son[u] = 0;
   for(int i = 0; i < G[u].size(); ++ i) {
	  int it = G[u][i];
	  if(vis[it] || fa == it) continue;
	  getroot(it,u);
	  max_son[u] = max(max_son[u],siz[it]);
	  siz[u] = siz[it] + siz[u];
   }
   max_son[u] = max(max_son[u],now_node - siz[u]);
   if(max_son[u] < Mx) Mx = max_son[u], root = u;
}
pair<int,int> ans;
pair<int,ll> tmp[maxn];
int mul[mod+10], idx;//存对于同一个模数的最小序号
ll lis[maxn], lis_idx;
void dfs(int u, int fa, ll sum) {
	int t = (1ll*K*qmi(sum,mod-2))%mod;
	if(mul[t] != 1e9) {
		if(ans > (pair<int,int>){min(mul[t],u),max(mul[t],u)})
			ans = {min(mul[t],u),max(mul[t],u)};
	}

   tmp[idx++] = {u,sum};
   for(int i = 0; i < G[u].size(); ++ i) {
	   int it = G[u][i];
	   if(it == fa || vis[it]) continue;
       dfs(it, u, sum*val[it]%mod); 
   }
}

inline void getans(int u) {
    for(int i = 0;i < lis_idx; ++ i) mul[lis[i]] = 1e9;
	lis_idx = 0;
	mul[val[u]] = u;
	lis[lis_idx++] = val[u];
    for(int i = 0; i < G[u].size(); ++ i) {
		int it = G[u][i];
        if(vis[it]) continue;
		dfs(it, u, val[it] % mod);
		for(int i = 0; i < idx; ++ i) {
		   int t = 1ll * tmp[i].second * val[u] % mod;
		   mul[t] = min(mul[t],tmp[i].first);
		   lis[lis_idx++] = t;
		}
		idx = 0;
	}
}
void Div(int u) {
	vis[u] = 1;
	getans(u);
    for(int i = 0; i < G[u].size(); ++ i) {
		int it = G[u][i];
		if(vis[it]) continue;
        Mx = 1e9, root = 0;
		now_node = siz[it];
		getroot(it,0);
		Div(root);
	}
}

int main() {
	for(int i = 0; i < mod; ++ i) mul[i] = 1e9;
	while(scanf("%d%d",&N,&K) != EOF) {	
		ans = {1e9,1e9};
		for(int i = 1; i <= N; ++ i) vis[i] = 0, G[i].clear();
		for(int i = 1; i <= N; ++ i)
		    scanf("%d",&val[i]);
		for(int i = 1; i < N; ++ i) {
			int l, r;
			scanf("%d%d",&l,&r);
			G[l].push_back(r);
			G[r].push_back(l);
		} 
		if(K == 0) {
			printf("No solution\n");
			continue;
		}
		now_node = N;
        Mx = 1e9, root = 0;
		getroot(1,0);
		Div(root);
		if(ans.second == 1e9) printf("No solution\n");
		else printf("%d %d\n",ans.first,ans.second);
	}
	return 0;
}
在探索智慧旅游的新纪元中,一个集科技、创新与服务于一体的整体解决方案正悄然改变着我们的旅行方式。智慧旅游,作为智慧城市的重要分支,旨在通过新一代信息技术,如云计算、大数据、物联网等,为游客、旅游企业及政府部门提供无缝对接、高效互动的旅游体验与管理模式。这一方案不仅重新定义了旅游行业的服务标准,更开启了旅游业数字化转型的新篇章。 智慧旅游的核心在于“以人为本”,它不仅仅关注技术的革新,更注重游客体验的提升。从游前的行程规划、信息查询,到游中的智能导航、个性化导览,再到游后的心情分享、服务评价,智慧旅游通过构建“一云多屏”的服务平台,让游客在旅游的全过程中都能享受到便捷、个性化的服务。例如,游客可以通过手机APP轻松定制专属行程,利用智能语音导览深入了解景点背后的故事,甚至通过三维GIS地图实现虚拟漫游,提前感受目的地的魅力。这些创新服务不仅增强了游客的参与感和满意度,也让旅游变得更加智能化、趣味化。 此外,智慧旅游还为旅游企业和政府部门带来了前所未有的管理变革。通过大数据分析,旅游企业能够精准把握市场动态,实现旅游产品的精准营销和个性化推荐,从而提升市场竞争力。而政府部门则能利用智慧旅游平台实现对旅游资源的科学规划和精细管理,提高监管效率和质量。例如,通过实时监控和数据分析,政府可以迅速应对旅游高峰期的客流压力,有效预防景区超载,保障游客安全。同时,智慧旅游还促进了跨行业、跨部门的数据共享与协同合作,为旅游业的可持续发展奠定了坚实基础。总之,智慧旅游以其独特的魅力和无限潜力,正引领着旅游业迈向一个更加智慧、便捷、高效的新时代。
内容概要:本文详细介绍了大模型的发展现状与未来趋势,尤其聚焦于DeepSeek这一创新应用。文章首先回顾了人工智能的定义、分类及其发展历程,指出从摩尔定律到知识密度提升的转变,强调了大模型知识密度的重要性。随后,文章深入探讨了DeepSeek的发展路径及其核心价值,包括其推理模型、思维链技术的应用及局限性。此外,文章展示了DeepSeek在多个行业的应用场景,如智能客服、医疗、金融等,并分析了DeepSeek如何赋能个人发展,具体体现在公文写作、文档处理、知识搜索、论文写作等方面。最后,文章展望了大模型的发展趋势,如通用大模型与垂域大模型的协同发展,以及本地部署小模型成为主流应用渠道的趋势。 适合人群:对人工智能和大模型技术感兴趣的从业者、研究人员及希望利用DeepSeek提升工作效率的个人用户。 使用场景及目标:①了解大模型技术的最新进展和发展趋势;②掌握DeepSeek在不同领域的具体应用场景和操作方法;③学习如何通过DeepSeek提升个人在公文写作、文档处理、知识搜索、论文写作等方面的工作效率;④探索大模型在特定行业的应用潜力,如医疗、金融等领域。 其他说明:本文不仅提供了理论知识,还结合实际案例,详细介绍了DeepSeek在各个场景下的应用方式,帮助读者更好地理解和应用大模型技术。同时,文章也指出了当前大模型技术面临的挑战,如模型的局限性和数据安全问题,鼓励读者关注技术的持续改进和发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值