news 2026/5/4 3:16:31

UVa 11174 Stand in a Line

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 11174 Stand in a Line

题目分析

nnn个人站成一排,给出mmm对父子关系(a,b)(a, b)(a,b),表示bbbaaa的父亲。要求排列中任何人都不能站在他父亲的前面。求满足条件的排列数,结果对100000000710000000071000000007取模。

约束条件:

  • T<14T < 14T<14(测试用例数)
  • 1≤n≤400001 \leq n \leq 400001n40000
  • 0≤m<n0 \leq m < n0m<n
  • 每个人最多有一个父亲
  • 不存在祖先环

解题思路

这个问题可以转化为森林的拓扑排序计数问题。父子关系构成一个有向无环图(DAG\texttt{DAG}DAG),且由于每人最多一个父亲,实际上形成的是多棵树(森林)。

关键公式

对于一棵有kkk个节点的有根树,其拓扑排序数量为:

k!∏u∈treesize[u] \frac{k!}{\prod_{u \in \text{tree}} size[u]}utreesize[u]k!

其中size[u]size[u]size[u]表示以uuu为根的子树大小。

公式解释:

  • 如果没有限制,排列数为k!k!k!
  • 对于每个节点uuu,其所有子孙在排列中必须保持uuu在它们前面的相对顺序
  • 因此要除以每个节点的子树大小

扩展到森林(多棵树),公式变为:

ans=n!×∏i=1n1size[i](modM) ans = n! \times \prod_{i=1}^n \frac{1}{size[i]} \pmod{M}ans=n!×i=1nsize[i]1(modM)

算法步骤

  1. 预处理:计算111400004000040000的阶乘模100000000710000000071000000007
  2. 建图:根据输入建立父子关系图
  3. 标记根节点:没有父亲的节点即为树的根
  4. 计算子树大小:从每个根节点开始执行DFS\texttt{DFS}DFS,计算每个节点的sizesizesize
  5. 计算结果:应用上述公式,使用模逆元处理除法
  6. 输出:对每个测试用例输出结果

参考代码

// Stand in a Line// UVa ID: 11174// Verdict: Accepted// Submission Date: 2025-11-01// UVa Run Time: 0.080s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintMOD=1000000007;constintMAXN=40005;longlongfact[MAXN];vector<int>children[MAXN];intsz[MAXN];boolhasParent[MAXN];longlongmodPow(longlonga,longlongb){longlongres=1;while(b>0){if(b&1)res=res*a%MOD;a=a*a%MOD;b>>=1;}returnres;}voiddfs(intu){sz[u]=1;for(intv:children[u]){dfs(v);sz[u]+=sz[v];}}intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);fact[0]=1;for(inti=1;i<MAXN;i++)fact[i]=fact[i-1]*i%MOD;intT;cin>>T;while(T--){intn,m;cin>>n>>m;for(inti=1;i<=n;i++){children[i].clear();hasParent[i]=false;}for(inti=0;i<m;i++){inta,b;cin>>a>>b;children[b].push_back(a);hasParent[a]=true;}for(inti=1;i<=n;i++)if(!hasParent[i])dfs(i);longlongr=fact[n];for(inti=1;i<=n;i++){r=r*modPow(sz[i],MOD-2)%MOD;}cout<<r<<"\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 3:12:46

ChatTTS-GPU算力优化指南:提升显存利用率技巧

ChatTTS-GPU算力优化指南&#xff1a;提升显存利用率技巧 1. 为什么ChatTTS需要GPU优化&#xff1f; ChatTTS虽小&#xff0c;但很“吃”显存——这不是错觉。当你在本地运行WebUI时&#xff0c;可能刚加载模型就遇到CUDA out of memory报错&#xff1b;生成一段30秒语音&…

作者头像 李华
网站建设 2026/5/4 3:12:42

real-anime-z部署案例(阿里云ECS):2核8G+T4显卡稳定运行实录

real-anime-z部署案例&#xff08;阿里云ECS&#xff09;&#xff1a;2核8GT4显卡稳定运行实录 1. 项目概述 real-anime-z是一个基于Z-Image基础镜像构建的LoRA模型&#xff0c;专注于生成高质量的动漫风格图片。这个项目通过Xinference框架部署文生图模型服务&#xff0c;并…

作者头像 李华
网站建设 2026/5/4 2:58:46

【完整源码+数据集+部署教程】 卡牌图像分割系统源码&数据集分享 [yolov8-seg-convnextv2&yolov8-seg-EfficientFormerV2等50+全套改进创新点发刊_一

背景意义 随着计算机视觉技术的迅猛发展&#xff0c;图像分割作为其中的重要研究方向&#xff0c;逐渐在多个领域中展现出其广泛的应用潜力。尤其是在游戏产业和卡牌收集领域&#xff0c;图像分割技术的应用愈发显得重要。卡牌游戏因其丰富的视觉元素和复杂的游戏机制&#xff…

作者头像 李华
网站建设 2026/5/4 2:58:16

v音频转换成文字在线怎么操作?2026年5款在线音频转文字工具实测方法

如果你是采访记者、播客主、学生或内容创作者,处理音频文件时通常会卡在两个问题:一是识别效率,二是导出格式。在线音频转文字工具能直接省掉下载安装的麻烦,但市面上的方案差异挺大。微信里有个叫提词匠的小程序在处理这类需求时比较顺手,下面会重点拆解它的实际表现,再配合其…

作者头像 李华
网站建设 2026/5/4 2:54:30

Maven基础架构与整体认识

&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697; 数据结构专栏&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697;&#x1f697; &#x1f6f9;&#x1…

作者头像 李华
网站建设 2026/5/4 2:52:37

终极指南:使用Applera1n免费绕过iOS 15-16设备的iCloud激活锁

终极指南&#xff1a;使用Applera1n免费绕过iOS 15-16设备的iCloud激活锁 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾遇到过这样的情况&#xff1a;购买了一台二手iPhone或iPad&#xff0…

作者头像 李华