技术笔记:UVA11174StandinaLine

简介: 技术笔记:UVA11174StandinaLine

Stand in a Line


大意:有n个人排队,问有多少种排列使得没有人排在他的父亲前面


不难发现这是一个森林


设一个虚根root把所有树的根连起来,root排在所有方案的最前面,总方案数不变


设i的儿子为son1(i),son2(i)....sonk(i),k位i儿子的数量


设size【i】为i这棵子树的节点个数


f【i】为i这颗子树的方案数


f【i】 = f【son1【i】】 f【son2【i】】 ... f【sonk【i】】 (size【i】 - 1) / (size【son1【i】】! size【son2【i】】! .. size【sonk【i】】!)


相当于每颗子树内部排列:f【son1【i】】 f【son2【i】】 ... f【sonk【i】】


然后把同一颗子树看做相同的排:(size【i】 - 1) / (size【son1【i】】! size【son2【i】】! .. size【sonk【i】】!)


把f【son1【i】】...f【sonk【i】拆开,带进去


发现size【i】!作为分母出现一次,(size【i】-1)!作为分母出现一次,约分得size【i】


于是f【root】 = (size【root】 - 1)!/(size【son1【i】】 size【son2【i】】 ... size【sonk【i】】)


1 #include


2 #include


3 #include


4 #include


5 #include


6 #include


7 #include


8 #include


9 #define min(a, b) ((a) < (b) ? (a) : (b))


10 #define max(a, b) ((a) > (b) ? (a) : (b))


11 #define abs(a) ((a) < 0 ? (-1 (a)) : (a))


12 inline void swap(long long &a, long long &b)


13 {


14 long long tmp = a;a = b;b = tmp;


15 }


16 inline void read(long long &x)


17 {


18 x = 0;char ch = getchar(), c = ch;


19 while(ch < '0' || ch > '9') c = ch, ch = getchar();


20 while(ch <= '9' && ch >= '0') x = x 10 + ch - '0', ch = getchar();


21 if(c == '-') x = -x;


22 }


23


24 const long long INF = 0x3f3f3f3f;


25 const long long MAXN = 100000 + 10;


26 const long long MOD = 1000000007;


27


28 struct Edge


29 {


30 long long u,v,nxt;


31 Edge(long long _u, long long _v, long long _nxt){u = _u;v = _v;nxt = _nxt;}


32 Edge(){}


33 }edge【MAXN [ 1】;


34 long long head【MAXN】, cnt;


35 inline void insert(long long a, long long b)


36 {


37 edge【++cnt】 = Edge(a,b,head【a】);


38 head【a】 = cnt;


39 }


40


41 //代码效果参考:http://www.lyjsj.net.cn/wz/art_23110.html

long long f【MAXN】,t,n,m,b【MAXN】,size【MAXN】,fa【MAXN】;

42


43 void dfs(long long u)


44 {


45 size【u】 = 1;b【u】 = 1;


46 for(register long long pos = head【u】;pos;pos = edge【pos】.nxt)


47 {


48 long long v = edge【pos】.v;


49 if(b【v】) continue;


50 dfs(v), size【u】 += size【v】;


51 }


52 return;


53 }


54


55 long long pow(long long a, long long b)


56 {


57 long long r = 1, base = a%MOD;


58 //代码效果参考:http://www.lyjsj.net.cn/wz/art_23108.html

for(;b;b ]= 1)

59 {


60 if(b & 1) r = base, r %= MOD;


61 base = base, base %= MOD;


62 }


63 return r;


64 }


65


66 long long ni(long long x)


67 {


68 return pow(x, MOD - 2);


69 }


70


71 int main()


72 {


73 read(t);


74 f【0】 = 1;


75 for(register long long i = 1;i < MAXN;++ i)


76 f【i】 = (f【i - 1】 i) % MOD;


77 for(;t;--t)


78 {


79 memset(fa, 0, sizeof(fa));memset(head, 0, sizeof(head)), memset(b, 0, sizeof(b)), cnt = 0;


80 read(n), read(m);


81 for(register long long i = 1;i <= m;++ i)


82 {


83 long long tmp1,tmp2;


84 read(tmp1), read(tmp2);


85 insert(tmp2, tmp1);


86 fa【tmp1】 = tmp2;


87 }


88 for(register long long i = 1;i <= n;++ i)


89 //代码效果参考:http://www.lyjsj.net.cn/wx/art_23106.html

if(!b【i】)

90 {


91 int now = i;


92 while(fa【now】) now = fa【now】;


93 dfs(now);


94 }


95 long long ans = 1;


96 for(register long long i = 1;i <= n;++ i) ans = size【i】, ans %= MOD;


97 printf("%lld\n", f【n】 * ni(ans) % MOD);


98 }


99 return 0;


100 }


UVA11174

相关文章
Java中的异常链:从根源到解决方案
Java中的异常链:从根源到解决方案
|
开发工具 git Windows
VSCode下载与安装使用教程【超详细讲解】
VSCode下载与安装使用教程【超详细讲解】
4548 0
VSCode下载与安装使用教程【超详细讲解】
|
11月前
|
域名解析 运维 网络协议
网络诊断指南:网络故障排查步骤与技巧
网络诊断指南:网络故障排查步骤与技巧
3696 7
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能的未来:机器学习与深度学习的融合之旅
【9月更文挑战第35天】在这篇文章中,我们将深入探讨人工智能的两大支柱——机器学习和深度学习。我们将通过代码示例和实际应用案例,揭示它们如何相互补充,共同推动AI技术的发展。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启示。
229 0
|
9月前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
197 13
|
存储 算法 Java
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
225 1
|
11月前
|
机器学习/深度学习 存储 人工智能
【AI系统】低比特量化原理
模型量化是将浮点数模型参数转化为低比特整数表示的技术,旨在减少模型大小、内存消耗及推理延迟,但会带来精度损失。本文介绍量化的基本原理、优势及挑战,涵盖量化训练、动态与静态离线量化等方法,并探讨线性与非线性量化、饱和与非饱和量化等技术细节。
456 2
【AI系统】低比特量化原理
|
12月前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
351 0
|
机器学习/深度学习 人工智能 安全
探究人工智能在医疗影像诊断中的应用与挑战
人工智能(AI)技术在医疗影像诊断中的应用日益广泛,本文将探讨其应用前景与面临的主要挑战。通过分析现有技术的优势和不足,提出相应的改进建议,旨在为医疗行业提供更高效、准确的诊断解决方案。
410 0
|
存储 缓存 JavaScript
性能优化:通用快照方案
本文我们将探讨快照技术如何增强页面性能和用户体验,如何在业务中集成快照方案,以及我们的通用快照解决方案的技术细节。
下一篇
开通oss服务