题解 P7752 [COCI2013-2014#2] PALETA
1.题解 P7763 [COCI2016-2017#5] Ronald2.题解 P6497 [COCI2016-2017#2] Prosječni3.题解 P7537 [COCI2016-2017#4] Rima4.题解 P8017 [COCI2013-2014#4] UTRKA5.题解 P7751 [COCI2013-2014#2] PUTNIK
6.题解 P7752 [COCI2013-2014#2] PALETA
7.题解 P7586 [COCI2012-2013#1] SNAGA8.题解 P6485 [COCI2010-2011#4] PROSJEK9.题解 P6447 [COCI2010-2011#1] ŽABE10.题解P6677 [COCI2019-2020#2] Checker11.题解P8073 [COCI2009-2010#7] BAKICE12.题解P8084 [COCI2011-2012#4] BROJ13.题解P6370 [COCI2006-2007#6] KAMEN14.题解 P7165 [COCI2020-2021#1] Papričice15.题解 P9911 [COCI 2023/2024 #2] Kuglice16.题解 P6356 [COCI2007-2008#3] CUDAK17.题解 P7309 [COCI2018-2019#2] Kocka18.题解 P6548 [COCI2010-2011#2] IGRA19.题解 P6491 [COCI2010-2011#6] ABECEDA洛谷。
题意
一共有
分析
首先把每一个
那么我们的整个计算就可以分成两类:一个是链上的,另一个是环上的(包括自环)。
对于链上的,由于我们是拓扑计算,因此,我们只需要考虑其对于父亲的影响,由于其与其父亲不同,因此我们这个节点一共有
while(!q.empty()) { int now=q.front(); q.pop(); vis[now]=1; val[fa[now]]=1ll*val[fa[now]]*val[now]%MOD*(m-1)%MOD;//m即k if(!(--d[fa[now]])) q.push(fa[now]); }
接下来的就是环上的计算,我们先拆环成链,那么最后的方案数可以转化成最后一个节点与第一个节点颜色不同的方案数,简单 DP 即可。
令
那么很容易写出递推式:
至于每一个节点转移上来的选法全部累乘即可。
但是这题完结了吗?并没有,将我们上述的所有块代码打完,我们提交后可以惊现:
居然 MLE 了,此题的空间限制是 32MB。因此,我们需要一定程度上的优化我们的空间(当然也有些大佬一开始写的时候空间就比较小)。
- 如果是喜欢 define 来开 long long 的,要去掉。
- 如果是 dfs 统计环上节点数的,需要用循环。
- 可以把环上的 DP 滚动。
总结一下,这道题考验了一个基环树上的计算,以及一点点成分的 DP。
Code。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!