题解:P11292 【MX-S6-T4】「KDOI-11」彩灯晚会

news/2025/9/17 23:01:24/文章来源:https://www.cnblogs.com/a1a2a3a4a5/p/19097837

彩灯晚会:

\(n\)\(m\)\(k\) 种颜色,给每个点染色。
\(cnt_i\):第 \(i\) 种颜色长度为 \(l\) 的链的数量。其中 \(l\) 为题目给的一个常量。
\(\sum_{染色方案}\sum_{i=1}^k cnt_i^2\) 的和。


\(\sum_{染色方案}cnt_i\) 值都一样,钦定 \(pos\) 作为代表颜色,那么:
\(\sum_{染色方案}\sum_{i=1}^k cnt_i^2=k×\sum_{染色方案}cnt_{pos}^2\)

如果不解决 \(cnt_{pos}^2\),那么我们不得不枚举染色方案,所以考虑解决 \(cnt_{pos}^2\)
思考图论意义,\(cnt_{pos}^2=(1+1+…+1+1)×(1+1+…+1+1)\)
手玩可得:\(cnt_{pos}^2\) 为选择两个颜色为 pos 长度为 l 的链的方案数。

已经到可以 DP 的程度了。
\(f_{u,len1,len2,p}\)\(u\) 作为第 \(p\) 个重合点,链一长度为 \(len1\),链二长度为 \(len2\) 的方案数。
这时候发现转移很难,因为为了维护 DP 含义,我们不得不使两个链到下一个重合点前没有重合点。
用二项式反演把 DP 含义从“恰好”改为“钦定”就好了!

  • 具体的(\(F(i)\) 表示“钦定”,\(G(i)\) 表示“恰好”:
    \(F(i)=\sum_{i=1}^n k×f_{u,l,l,i}×k^{n-2l+i}\)(第一个 \(k\)\(pos\) 的值域)
    \(G(i)=\sum_{j=i}^l (-1)^{j-i} \binom{j}{i} F(j)\)

\(dis_{u,v,len}\):从 \(u\)\(v\) 长度为 \(len\) 的路径数。
\(st_{u,len}\)\(u\) 开头长度为 \(len\) 的路径条数。
\(ed_{u,len}\)\(u\) 结尾长度为 \(len\) 的路径条数。

\(O(n^3l+n^2l^5)\),其中 \(n^2l^5\) 中的一个 \(n\) 跑不满(DAG)导致 \([76,84]\) 分,拿上直接变人上人。

trick:分步枚举

  • 具体的:
    \(cab_{u,len1,len2,p}\):当前 \(len1\) 转移完了的 \(f\) 数组。
    \(f_{u,len1,len2,p}\):完整转移后的 \(f\) 数组。
    先枚举 \(len1\)\(f_{u,len1,len2,p}\) 更新 \(cab_{v,len1+k,len2,p+1}\)
    再枚举 \(len2\)\(cab_{u,len1,len2,p}\) 更新 \(f_{v,len1,len2+k,p+1}\)

\(O(n^3l+n^2l^4)\)——\([84,92]\) 分,考场知足分。

宇宙射线:把计算公式代入二项式反演的式子里化简。

\(H(i)=\sum_{i=1}^n f_{u,l,l,i}\)
\(F(i)=k^{n-2l+i+1}H(i)\)(第一个 \(k\)\(pos\) 的值域)
\(G(i)=\sum_{j=i}^l (-1)^{j-i} \binom{j}{i} F(j)\)

\[\begin{aligned} ans&=\sum_{i=0}^l G(i)\\ &=\sum_{i=0}^l \sum_{j=i}^l (-1)^{j-i} \binom{j}{i} k^{n-2l+i+1} H(j)\\ &=k^{n-2l+1}\sum_{j=0}^lH(j) \sum_{i=0}^j\binom{j}{i} (-1)^{j-i}k^i\\ &=k^{n-2l+1}\sum_{j=0}^l(k-1)^jH(j) \end{aligned} \]

trick:\((k-1)^j\)\(H(j)\) 的次数一样,可以直接把 \((k-1)\) 下发到 \(H(j)→H(j+1)\) 的转移,这时无须记录重合点个数了,直接一起计算就行了。

\(O(n^3l+n^2l^3)\)——\(100\) 分,卡常就不说了。

美码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int id,n,k,l,m; 
struct bbb {int v,w;} ;
const int QAQ=310,mo=998244353,ovo=22;
int idfn[QAQ],rd[QAQ],cab[QAQ][ovo][ovo],ed[QAQ][ovo],st[QAQ][ovo];
int f[QAQ][ovo][ovo],dis[QAQ][QAQ][ovo];
vector<bbb> dian[QAQ];
queue<int> dui;
int cnt;
__int128 ans;
#define jia(x,y) x=(x+y)%mo
int ksm(int x,int k)
{int da=1;for(;k;k>>=1,x=x*x%mo) if(k&1) da=da*x%mo;return da;
}
void write(__int128 ans)
{if(ans==0) return ;write(ans/10);putchar(ans%10+'0');
}
signed main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>id>>n>>k>>l>>m;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;dian[u].push_back({v,w});rd[v]++;}for(int i=1;i<=n;i++) if(rd[i]==0) dui.push(i);while(!dui.empty()){int x=dui.front();dui.pop();++cnt,idfn[cnt]=x;for(bbb nw:dian[x]){rd[nw.v]--;if(rd[nw.v]==0) dui.push(nw.v);}}for(int i1=1;i1<=n;i1++){int i=idfn[i1];dis[i][i][1]=1;for(int i2=i1;i2<=n;i2++)for(int len=1;len<l;len++){int j=idfn[i2];for(bbb nw:dian[j])jia(dis[i][nw.v][len+1],dis[i][j][len]*nw.w);}}for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)for(int j=1;j<=l;j++)jia(st[i][j],dis[i][k][j]),jia(ed[i][j],dis[k][i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans+=dis[i][j][l];ans%=mo;ans=ans*ans%mo;for(int i=1;i<=n;i++){int u=idfn[i];for(int o1=1;o1<=l;o1++)for(int o2=1;o2<=l;o2++)jia(f[u][o1][o2],ed[u][o1]*ed[u][o2]%mo*(k-1));for(int k=1;k<=n;k++)for(int i=1;i<=l;i++)for(int j=1;j<=l;j++)cab[k][i][j]=0;for(int i2=i;i2<=n;i2++)for(int o1=1;o1<=l;o1++)for(int o2=1;o2<=l;o2++){int v=idfn[i2];for(int c=1;c<=l-o1;c++)jia(cab[v][o1+c][o2],f[u][o1][o2]*dis[u][v][c+1]);}for(int i2=i;i2<=n;i2++)for(int o1=1;o1<=l;o1++)for(int o2=1;o2<=l;o2++){int v=idfn[i2];for(int c=1;c<=l-o2;c++)jia(f[v][o1][o2+c],cab[v][o1][o2]*dis[u][v][c+1]%mo*(k-1));}}for(int i=1;i<=n;i++)for(int o1=1;o1<=l;o1++)for(int o2=1;o2<=l;o2++)ans+=f[i][o1][o2]*st[i][l-o1+1]%mo*st[i][l-o2+1]%mo;ans%=mo;if(n-2*l+1>=0) ans=ans*ksm(k,n-2*l+1)%mo;else ans=ans*ksm(ksm(k,mo-2),-(n-2*l+1))%mo;if(ans==0) cout<<"0";else write(ans);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法课程第一周作业

《数学之美》第一章启示 《数学之美》的第一章,在算法工程师眼中,并非传授某个具体算法.而是重构了我们理解、设计和应用算法的底层思维框架,世界的基本问题是算法问题,而数学是寻找最优算法的终极语言。 启示一:所有问…

US$7.9 3 Button Remote Key for Chrysler/Jeep 315Mhz

3 Button Remote Key for Chrysler/Jeep 315Mhz GQ43VT13T Package includes:1pc x 3 Button Remote Key for Chrysler/Jeep 315Mhz GQ43VT13T Pictures of 3 Button Remote Key for Chrysler/Jeep 315Mhz3 Button Rem…

vue3 内存溢出临时方法

"serve1":"node --max_old_space_size=8096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve --open","serve2":"node --max_old_space_size=9096 node_modules/@vue…

实测对比:权威榜单之微信排版Top 5编辑器大揭秘

在新媒体运营的世界里,微信排版可是重中之重,它直接影响着文章的视觉效果和读者的阅读体验。很多运营人都有这样的痛点:写作慢、排版耗时、跨平台排版不统一、配图难还可能有侵权风险等。为了帮大家解决这些难题,我…

自建仓库推送到NAS采用 Docker Registry 工作流

放弃手动 `save` 和 `load` 的方式,改用行业标准的 Registry(仓库)模式。这是最专业、最高效的方案。 **优点**: - **彻底解决版本兼容性问题**,因为 push/pull 协议是标准化的。 - 传输效率高,再次推送时只会上…

【汇编和指令集 . 第2025 . 9期】发现大牛

【编者按】在计算机、互联网风行半个世纪之后,我们发现:科技预言家越来越多了,思想家缺位了。生活节奏变快了,思想退步了;书写减少了,纸张缺没少;知识泛滥了,思考没有深入......我们有可能遭AI时代的反噬。时代…

Opencompass避坑日记

安装首先执行pip安装 再下载源代码第一句是为了安装opencompass的依赖包,第二句是为了在当前目录引入本地目录的opencomass模块。 因为有很多修改的地方。 测评VLLM 放弃吧,这个框架对VLLM的支持很差。测评方式:稳定…

随笔 | 农场、小猴子、香蕉

在一个偏西部的农场中,有着一群猴子,他们每天的任务,是将香蕉树上的香蕉摘下来,而他们的报酬是仅仅九根香蕉,每天早上四根,每天晚上五根。某一天,其中一只猴子报怨,每天早上只能吃到四根香蕉,他提议说,改成每…

Day17数组的使用

package com.cc.array;public class ArrayDemo4 {public static void main(String[] args) {int [] arrays = {1,2,3,4,5};//jdk1.5之后的版本可以通果增强for寻循环来遍历数组或集合中的每一个元素//缺点在于没有下标…

US$17 4+1 Button Smart Card for chrysler/Dodge

4+1 Button smart card for chrysler/Dodge Package includes:1pc x 4+1 Button smart card for chrysler/Dodge Pictures of 4+1 Button Smart Card for chrysler/Dodge4+1 Button Smart Card for chrysler/Dodge, no…

完整教程:缓存与数据库一致性的4大坑及终极解决方案

完整教程:缓存与数据库一致性的4大坑及终极解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

Rust的Cargo用法详解 - 详解

Rust的Cargo用法详解 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

串行通信接口标准(TTL、CMOS、RS232、RS422、RS485、CAN等)

TTL电平 引言 TTL是 Transistor-Transistor Logic(晶体管-晶体管逻辑)的缩写,是早期基于双极性晶体管(BJT)技术的逻辑家族。 电平特点 1. 电源电压:+5V 2. 电平标准:Voh:≥ 2.4V; Vol: ≤ 0.4V; Vih:≥ 2.0…

攻防世界-IgniteMe - xxx

先查壳,发现没加壳,拖入ida-32反汇编了得到主函数 粗略看一下,能得到的信息有 输入的字符串长度为29,前四个字符是EIS{,最后一个字符是}想要输出Congratulations!关键的函数就是这个 4011C0函数,我们点进去看一下…

详细介绍:芯伯乐零漂移轨到轨运放芯片XBL8551/XBL8552/XBL8554系列,微安级功耗高精度信号处理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C 语言 之 面向对象(一)

C 语言 之 面向对象(一)C 语言 之 面向对象(一) 了解C语言面向对象之前首先需要对C语言的指针、结构体有基本了解。 指针 正常使用数组: void hello(){#define count 10// shint a[count] = {1, 2, 3, 4, 5, 6, 7…

for_switch

func forCase() {for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println("位置1 执行 for 语句块 i:", i)}fmt.Println("-------循环 slice ------")list := []int{1, 2, 3, 4, 5}for in…

Linux内存管理章节十九:超越kmalloc:自定义内存分配器开发实战 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

测井数据分析与建模完整教程 - 详解

测井数据分析与建模完整教程 - 详解2025-09-17 22:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

记录我见过的神人

魔丸《待审核》 注:团长高仿号申请进团焯神观察兵古风 古风