题解:P16710 愿望

结论

对于菊花图:若存在度数为n−1n-1n−1的点,则令非中心节点权值依次为0,1,2,...,n−20,1,2,\ldots,n-20,1,2,...,n−2,中心节点权值为000。

对于一般树:令树总异或和为0。给非根点分配互异子树异或和(0,1,...,n−2)(0,1,\dots,n-2)(0,1,...,n−2),且父子不同(根为0)。DFS从小到大给儿子分配值,遇父值跳过。点权=自身目标值⊕\oplus⊕所有儿子目标值。

推导

我们考虑从子树异或和下手。

对于树TTT,节点iii的值为为aia_iai,任意指定一个点为根rootrootroot。

我们定义XiX_iXi为点iii的子树异或和,SSS为整棵树的异或和,题意为对于每一个点iii,由它的任意儿子vvv的XvX_vXv与S⊕XiS\oplus X_iS⊕Xi(即父亲那一块)的集合内的树互不相等。

我们先令S=0S=0S=0,那么父亲那一块值即为XiX_iXi得:

-若iii非根,{Xv∣v∈son⁡(i)}∪{Xi}\{X_v\mid v\in\operatorname{son}(i)\}\cup\{X_i\}{Xv∣v∈son(i)}∪{Xi}中元素互异;

-若iii为根,{Xv∣v∈son⁡(i)}\{X_v\mid v\in\operatorname{son}(i)\}{Xv∣v∈son(i)}中元素互异。

那么我们思考如何让XXX满足以上条件,显然可以的得到所有非根节点的值要彼此不同,我们可以使它们恰好覆盖1,2,...,n−11,2,\dots,n-11,2,...,n−1中的一些数,且父子之间不能相等。(规定Xroot=0X_{root}=0Xroot=0即S=0S=0S=0)

我们可以发现非根节点有n−1n-1n−1个,我们可以用0,1,2,...,n−20,1,2,\dots,n-20,1,2,...,n−2来分配,来使得值域最小。

对于点iii,由XiX_iXi定义:Xi=ai⊕X_i=a_i\oplusXi=ai⊕所有儿子的XXX 得:ai=Xi⊕a_i=X_i\oplusai=Xi⊕所有儿子的XXX

容易证明这种构造方式的最大不会超过2⌈log⁡2n⌉2^{\lceil\log_2{n}\rceil}2⌈log2n⌉(接近于nnn)。

但是当是菊花图时就可以卡到这个上线,可能超过m。

但显然菊花图只用令非中心节点权值依次为0,1,2,...,n−20,1,2,\ldots,n-20,1,2,...,n−2,中心节点权值为000就能构造出来。

实现

一遍深搜求XXX并且同时算出aaa就行了。

:::successcode

cpp 复制代码
#include<bits/stdc++.h>
#defineintlonglong
usingnamespacestd;
intn,m,a[1000001],deg[1000001];
vector<int>g[1000001];
voiddfs(intu,intfa,intw){
	int j=0,s=w;
	for(int v:g[u]){
		if(v==fa){continue;}
		if(j==w&&u!=1){j++;}
		s^=j;
		dfs(v,u,j);
		j++;
	}
	a[u]=s;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<n;++i){
		int u,v;cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
		deg[u]++,deg[v]++;
	}
	intrt=0;
	for(inti=1;i<=n;++i){if(deg[i]==n-1){rt=i;}}
	if(rt){
		int j=0;
		for(int i=1;i<=n;++i){if(i!=rt){a[i]=j++;}}
	}
	else{dfs(1,0,0);}
	for(int i=1;i<=n;++i){cout<<a[i]<<"";}
}

:::

相关推荐
2601_962218613 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·3 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕5 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1236 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl7 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王8 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218618 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.8 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法