当前位置: 首页 > news >正文

F1005D. 「阶段测试5」合影

题意:

\(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\) 都有出边那么这玩意会构成内向基环树森林。考虑删掉环的一些部分使得有答案,那么你一定可以找到一个根在环上一点。

那么直接做就可以了。

细节:预处理逆元可以做到线性,这里还有一个性质值得注意,数据范围里写了 \(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;
}
http://www.hskmm.com/?act=detail&tid=31414

相关文章:

  • 2025 年铝外壳铝型材厂家选购指南:美容仪/充电宝/暴力风扇铝外壳铝型材,精选优质厂商助力企业高效选型
  • Windows 11 25H2来了,附升级教程及windows官方镜像下载
  • 2025 年灌装生产线厂家最新推荐榜单:饮料 / 矿泉水 / 纯净水 / 桶装水 / 全自动灌装生产线厂家权威评选及选购指南
  • 鸿蒙应用开发从入门到实战(二十二):使用Stack实现层叠布局
  • 我造了个程序员练兵场,专治技术焦虑症!
  • 原创2025年小红书创作者影响力分析报告:基于10
  • 原创2020年纽约市交通事故数据集深度解析:基于74,881条记录的智能交通管理与自动驾驶算法训练实战指南,覆盖超速、分心驾驶、天气因素等多维度事故原因分析,助力城市安全治理从被动应对转向主动预防
  • 原创2000万道+K12教育题库数据集:覆盖小学到高中全学段多学科智能教育训练数据,助力AI教育应用与个性化学习系统开发
  • 原创1747张YOLO标注奶牛水牛识别数据集:精准标注跨场景动物检测模型训练专用计算机视觉数据集,助力智慧农业与畜牧业AI算法研发
  • 原创1
  • AgentFounder浅析——Agent的演化历程与目标
  • Aniyomi扩展开发指南与Google Drive集成方案
  • 2025 最新开锁公司口碑排行榜权威甄选:智能锁 / 汽车锁 / 保险柜开锁服务最新推荐,安全高效品牌指南
  • 最新Ps 2025安装包免激活破解版(Adobe Photoshop 2025 v26.10)Ps安装包永久免费版下载安装教程
  • 在 package.json 中,版本号前面的符号用于定义依赖包的版本更新规则,生产环境建议:使用 ~ 确保向后兼容或者不写符号使用精确版本
  • 26Java基础之特殊文本文件、日志技术
  • linux wipefs 命令详解以及应用场景和举例说明
  • VMware Fusion 25H2 for Mac - 领先的免费桌面虚拟化软件
  • 《梦断代码》阅读笔记02
  • 【IEEE出版】第五届高性能计算、大数据与通信工程国际学术会议(ICHBC 2025)
  • 基于遗传算法的33节点微电网网络重构优化
  • PMTU机制原理和缺陷
  • 2025 年摇臂钻床厂商最新推荐排行榜:含 3050/3080/3040/3063/50 型号厂家产能与供应优势详解
  • 20232402 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 2025 年最新推荐排水沟厂家排行榜:聚焦树脂 / 线性 / 树脂混凝土 / 成品 /u 型排水沟优质厂家推荐
  • 2025 年盖板源头厂家最新推荐榜单:涵盖电力 / 隧道 / 扣槽 / 室内外电缆沟 / 复合及树脂盖板,深度解析源头厂家原材料采购与成本控制
  • AC6966B SD配置F组可以吗?ok
  • 2025 年最新紫外线灯厂家推荐排行榜:优质厂家权威榜单发布,含杀菌灯消毒灯选购指南
  • trading platform
  • .NET 构架下remoting和webservice