F1005D. 「阶段测试5」合影

news/2025/10/15 11:24:06/文章来源:https://www.cnblogs.com/needna/p/19142908

题意:

\(n\) 个人排成一排,每个点 \(i\) 最多会给出一条限制,形如 \((i,j)\) 表示点 \(i\) 必须站在 \(j\) 的左侧。问有多少种成立的方案数,答案对输入的模数 \(p\) 取模。

对于\(100\%\) 的数:\(n≤2\times 10^5,m≤2\times 10^5,m≤n,n+10≤p≤10^9+7,T≤10\).

题解:

给个不一样的做法,应该好写一点。

我们考虑限制构成什么,先用限制构造边 \(i\to j\),发现如果所有 \(i\) 都有出边那么这玩意会构成外向基环树森林,但是我们会发现如果有环,那一定无解,所以在有解的情况下会构成一棵树。

现在再思考限制的本质,对于 \(i\to j\), 这是一个经典的问题,等价于满足构成的树上 \(i\) 的拓扑序小于 \(j\)

对于这个经典的有根树版本问题我们有一个经典的结论:

\[ans=\frac{n!}{\prod^{n}_{i=1}siz_i} \]

其中 \(siz_i\)\(i\) 的子树大小。考虑怎么把我们的限制构造成有根树,发现我们把 \(i\to j\) 都换成 \(j\to i\) 答案肯定是不变的,把题意理解成 \(i\)\(j\) 的右侧即可。这样一定是有根树。

证明:

考虑一般情况,若发现如果所有 \(i\) 都有出边那么这玩意会构成内向基环树森林。考虑删掉环的一些部分使得有答案,那么你一定可以找到一个根在环上一点。

那么直接做就可以了。时间复杂度 \(O(Tn)\).

细节:预处理逆元可以做到线性,这里还有一个性质值得注意,数据范围里写了 \(n+10\le p\),这使得我们可以直接处理逆元,因为如果 \(n\ge p\) 的话我们就要用 \(lucas\) 定理了。

code:

#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define m(a) memset(a,0,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int N=2e5+10;
int n,m,k,T,siz[N],vis[N],cnt,tg,mod,ni[N],ans;
vector<int> g[N];
int ksm(int x,int k){int ans=1;while(k){if(k&1) ans=ans*x%mod;x=x*x%mod;k>>=1;}return ans;
}
void dfs(int u){vis[u]=cnt;siz[u]=1;for(int v:g[u]){if(vis[v]==cnt){tg=1;break;	}else if(!vis[v]) dfs(v);siz[u]+=siz[v];}
}
void init(){rep(i,1,n) g[i].clear();tg=0;cnt=0;m(siz);m(vis);ni[1]=1;ans=1;rep(i,2,n) ni[i]=(-mod/i*ni[mod%i]%mod+mod)%mod;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n>>m>>mod;init();rep(i,1,m){int x,y;cin>>x>>y;g[y].pb(x);}rep(i,1,n){if(!vis[i]) cnt++,dfs(i);}if(tg==1){cout<<0<<'\n';continue;}rep(i,1,n){ans=ans*i%mod;ans=ans*ni[siz[i]]%mod;}cout<<ans<<'\n';}return 0;
}

官方解法:

算法1

对于 15%的数据 我们可以直接枚举所有置换,再进行判断即可,时间复杂度$ O(T*n!)$

算法2

对于 50%的数据 定义$ f[S]$表示已经选了元素集合为 \(S\) 的合法方案数是多少, 转移方程为 \(f[S]=∑ 𝑓[𝑆 − 2^x ]\),满足 x 是 S 中的元素且所有限制 均不矛盾,可以先预处理每个位置不合法状态的集合,这样 时间复杂度 \(O(n T *2^n)\),如果你写成 \(O(n*n*T*2^n)\),那么 恭喜你,你只有 30(常数小的除外)分了。

算法3

对于余下所有数据, 我们需要观察出一些性质。
如果我们对于一条限制 \((x, y)\), 建一条 \(x->y\) 的边, 就会发 现在这张图中每个点的出边最多只有一条。

如果在这张图中有环, 则答案一定为 0 。
如果这张图无环, 则这些边一定构成一个森林。
所以我们可以跑树形 dp。

定义 \(f[i]\) 表示第 \(i\) 棵子树的方案数是多少。
转移时, 相当于有很多的儿子 \(s_{1}, s_{2} \ldots s_{n}\) (设每个儿子的子树 大小为 size), 相当于对于一个序列中, 先选 1 个位置给 \(s_{1}\),
再在余下的位置中, 选 2 个位置给 \(s_{2} \ldots\), 相当于一些组合数的 乘积再乘以每个儿子内部的方案数。

算法4

对于 \(70 \%\) 的数据

我们可以利用组合恒等式 \(c_{x}^{y}=c_{x-1}^{y}+C_{x-1}^{y-1}\) 预处理组合数, 或是预 处理逆元暴力求组合数, 复杂度均为 \(O\left(T^{*} n * n\right)[m\) 一定小 于等于 \(n\), 所以 \(m\) 近似为 \(n\) ]

算法5

对于 \(100 \%\) 的数据

我们可以先预处理阶乘, 阶乘的逆元, 然后组合数就可以 \(\mathrm{O}(1)\) 了, 总复杂度为 \(O\left(T^{*}(n+m)\right)\)

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

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

相关文章

2025 年铝外壳铝型材厂家选购指南:美容仪/充电宝/暴力风扇铝外壳铝型材,精选优质厂商助力企业高效选型

随着 3C 数码、智能家居、户外装备等行业的快速发展,以及消费者对产品外观、散热性与耐用性要求的提升,铝型材凭借轻量化、易加工、耐腐蚀等优势,应用场景已从传统工业领域逐步拓展至美容仪、充电宝、光模块等多个细…

Windows 11 25H2来了,附升级教程及windows官方镜像下载

介绍 Windows 11 25H2不知不觉出推送了,算是2025年度更新了,此时距离上一个大版本升级 24H2 发布已经过去了整整一年,24,25也特别容易理解,现在系统 iSO 镜像也上线了。 不过一个变化是 25H2 并没有向 Win 11 用户…

2025 年灌装生产线厂家最新推荐榜单:饮料 / 矿泉水 / 纯净水 / 桶装水 / 全自动灌装生产线厂家权威评选及选购指南

当前液体产品生产行业中,灌装生产线作为核心设备,其品质直接决定企业生产效率与产品质量。但市场上品牌繁杂,设备性能差异悬殊,众多企业在选购时屡屡陷入困境:部分设备自动化水平不足,难以适配规模化生产;部分品…

鸿蒙应用开发从入门到实战(二十二):使用Stack实现层叠布局

ArkUI提供了各种布局组件用于界面布局,本文研究使用Stack组件实现层叠布局。界面布局:层叠布局 大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新A…

我造了个程序员练兵场,专治技术焦虑症!

你别说,这 AI 骂人好脏啊!你是一名月薪 3000 的程序员,慕名来到鱼皮的技术练兵场,听闻此地可通过不断挑战提升技术水平和薪资,策马奔腾。事不宜迟,准备挑战吧,愿君武运昌隆!本文对应视频版:https://bilibili.…

原创2025年小红书创作者影响力分析报告:基于10

如需更多高质量数据,欢迎访问典枢数据交易平台 2025年小红书创作者影响力分析报告:基于10.5万条数据构建评估模型,识别高影响力内容特征,优化推荐算法与运营策略,涵盖用户分层、互动数据、地理位置分布,提供内容…

原创2020年纽约市交通事故数据集深度解析:基于74,881条记录的智能交通管理与自动驾驶算法训练实战指南,覆盖超速、分心驾驶、天气因素等多维度事故原因分析,助力城市安全治理从被动应对转向主动预防

如需更多高质量数据,欢迎访问典枢数据交易平台 2020年纽约市交通事故数据集深度解析:基于74,881条记录的智能交通管理与自动驾驶算法训练实战指南,覆盖超速、分心驾驶、天气因素等多维度事故原因分析,助力城市安全…

原创2000万道+K12教育题库数据集:覆盖小学到高中全学段多学科智能教育训练数据,助力AI教育应用与个性化学习系统开发

如需更多高质量数据,欢迎访问典枢数据交易平台 2000万道+K12教育题库数据集:覆盖小学到高中全学段多学科智能教育训练数据,助力AI教育应用与个性化学习系统开发 引言与背景 在人工智能技术飞速发展的今天,教育领域…

原创1747张YOLO标注奶牛水牛识别数据集:精准标注跨场景动物检测模型训练专用计算机视觉数据集,助力智慧农业与畜牧业AI算法研发

如需更多高质量数据,欢迎访问典枢数据交易平台 1747张YOLO标注奶牛水牛识别数据集:精准标注跨场景动物检测模型训练专用计算机视觉数据集,助力智慧农业与畜牧业AI算法研发 引言与背景 在当今数字化农业和智慧畜牧业…

原创1

如需更多高质量数据,欢迎访问典枢数据交易平台 1.95GB 皇家马德里与利物浦 2018 欧冠决赛推文数据集:多维度 JSON 格式社交媒体数据,适用于体育舆论分析、情感计算与传播研究的高质量标注资源 引言与背景 社交媒体数…

AgentFounder浅析——Agent的演化历程与目标

理论上(浅显)分析Agent与传统llm、RAG的不同以及演进历程,根据Agent的目标解读AgentFounder论文的训练策略和数据集构建 Agent的目标以及对应的技术方案 Agent的推理目标 形式化的表达: 咱们首先来分析一下最开始大…

26Java基础之特殊文本文件、日志技术

特殊文件 为什么要用这些特殊文件?存储多个用户的:用户名、密码Rroperties是一个Map集合(键值对集合),但是我们一般不会当集合使用。 核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里…

Aniyomi扩展开发指南与Google Drive集成方案

本文详细介绍了Aniyomi扩展的开发流程和Google Drive集成方案,包含完整的代码结构、安装指南和使用说明,帮助开发者快速构建功能丰富的动漫扩展应用。Aniyomi扩展开发指南 项目概述 Aniyomi是一个基于Android 6.0+的…

2025 最新开锁公司口碑排行榜权威甄选:智能锁 / 汽车锁 / 保险柜开锁服务最新推荐,安全高效品牌指南

锁具服务作为居家与企业安防的关键一环,其专业性与安全性直接关乎财产安全。当前行业却深陷多重困境:无证 “游击队” 服务商充斥市场,无备案资质、缺专业技术的问题给用户埋下安全隐患;智能锁的快速普及让传统服务…

完整教程:ESD保护设计指南 - littelfuse

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

【Python精讲 16】实战项目演练(二):用Flask/FastAPI发布你的第一个Web API - 详解

【Python精讲 16】实战项目演练(二):用Flask/FastAPI发布你的第一个Web API - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

基于遗传算法的33节点微电网网络重构优化

一、系统建模与参数配置 1. 33节点配电网拓扑 +-------------------+| 33节点主网架 || (IEEE标准结构) |+--------+----------+|v +-------------------+ +-------------------+ | 分布式电源 …

PMTU机制原理和缺陷

PMTU 机制原理 PMTU(Path Maximum Transmission Unit,路径最大传输单元)发现机制 是一种用于动态探测从源主机到目的主机之间整条网络路径上最小 MTU 值的技术,目的是避免 IP 数据包在传输过程中被分片。 ✅ 核心目…

2025 年摇臂钻床厂商最新推荐排行榜:含 3050/3080/3040/3063/50 型号厂家产能与供应优势详解

当前制造业加速向智能化、高效化转型,摇臂钻床作为机械加工核心设备,其品质与供应效率直接决定下游企业生产进度与产品精度。但市场中供应商数量繁杂,部分厂商存在产能不足导致交货延迟、技术落后无法满足定制需求、…

Linux进程 --- 2 - 实践

Linux进程 --- 2 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…