uva 11174(排列组合+搜索)

依然是liurujia计数练习题。依然是自己想没想出来,在MOD是素数的情况下除以x即为乘x的逆。这个真心以前没听过,用了这个方法后处理就变得十分巧妙。

整个程序步骤还是很清晰的,先上来算阶乘与逆(求数的逆还是有点没理解透,需要后续章节继续学习)。然后读入建图只能用邻接表了,注意加上最开始的那个根节点就行了。

然后就是搜索按照书上的公式计算就行了。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <vector>
 5 #include <cmath>
 6 #include <algorithm>
 7 #define LEN 40100
 8 #define MOD 1000000007
 9 #define ll long long
10 using namespace std;
11 
12 int n, m, isrt[LEN];
13 ll jc[LEN], rjc[LEN], ans;
14 vector<ll> map[LEN];
15 
16 //扩展欧几里德
17 ll extend_gcd(ll a, ll b, ll &x,ll &y){
18    ll t,_m;
19    if ((b==0)&(a==0)) return -1;//表示无最大公因数
20    if (b==0){
21          x=1;y=0;       return a;
22    }
23    else {
24          _m=extend_gcd(b,a % b,x,y);
25          t=x;x=y;y=t-(a/b)*y;
26    }
27    return _m;
28 }
29 
30 //初始化阶乘和他的逆
31 void cntjc()
32 {
33     ll x,y;
34     jc[0] = 1;
35     for(int i=1; i<LEN; i++){
36         jc[i] = (jc[i-1]*i)%MOD;
37         ll ta = extend_gcd(i,MOD,x,y);
38         if(ta==1 || ta==-1) rjc[i] = (x+MOD)%MOD;
39         else rjc[i] = -1;
40     }
41 }
42 
43 void init()
44 {
45     memset(isrt, 0, sizeof isrt);
46     for(int i=0; i<LEN; i++){
47         map[i].clear();
48     }
49     //建图
50     int a, b;
51     scanf("%d%d", &n, &m);
52     for(int i=0; i<m; i++){
53         scanf("%d%d", &a, &b);
54         map[b].push_back(a);
55         isrt[a] = 1;
56     }
57     //加入总的根节点
58     for(int i=1; i<=n; i++){
59         if(!isrt[i]) map[0].push_back(i);
60     }
61 }
62 
63 int DFS(int vex)
64 {
65     int cnt = 1;
66     for(vector<ll>::iterator it=map[vex].begin(); it!=map[vex].end(); ++it){
67         cnt+=DFS(*it);
68     }
69     if(vex) ans = ans*rjc[cnt]%MOD;
70     return cnt;
71 }
72 
73 int main()
74 {
75 //    freopen("in.txt", "r", stdin);
76 
77     int T;
78     scanf("%d", &T);
79     cntjc();
80     while(T--)
81     {
82         init();
83         ans = jc[n];
84         DFS(0);
85         printf("%lld\n", ans);
86     }
87     return 0;
88 }
View Code

 

转载于:https://www.cnblogs.com/shu-xiaohao/p/3413540.html

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

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

相关文章

将Source Insight的代码拷贝到word文档的方法

1、用Source Insight打开文件后&#xff0c;File->Print&#xff1b; 2、在 常规->选择打印机中&#xff0c;选择“Adobe PDF”&#xff08;或者其他pdf打印机&#xff09;&#xff1b; 3、点确定&#xff0c;输出一个pdf文件了&#xff0c;然后去pdf文件里面复制代码&…

Oracle 学习笔记

2019_6_27日 星期四 第一章 oracle从入门到精通Laarry Ellison: 拉里.埃里森Bruce Scott: Tiger PointBase(WebLogic软件产品中附赠的数据库产品) 1.1 oracle安装oracle从实际的开发来讲&#xff0c;oracle11g是使用较多的&#xff0c;oracle的开发主要分为两类&#xff1a;.数…

引导滤波的opencv实现以及解释

参考&#xff1a; https://blog.csdn.net/qq_36006553/article/details/78594205

S5PV210的地址映射简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 S5PV210属于ARM Cortex-A8架构&#xff0c;是32位的CPU&#xff0c;有32根地址线和32根数据线。 这表明该CPU的寻址空间为4G&#xff0c;地址映射关系见下述。 S5PV210的地址映射 S5PV210的地址映射…

本杰明 富兰克林 道德13准则

富兰克林认为&#xff0c;好的习惯必须加以培养&#xff0c;坏的习惯必须打破。为了克服缺点&#xff0c;使自己少犯错误&#xff0c;他制定了13条道德准则。他说&#xff1a;“我打算获得这13种美德&#xff0c;并养成习惯。为了不致分散精力&#xff0c;我不指望一下子全做到…

树莓派(Raspberry Pi):完美的家用服务器

出处&#xff1a;http://linux.cn/thread/11884/1/1/ 树莓派&#xff08;Raspberry Pi&#xff09;&#xff1a;完美的家用服务器 自从树莓派发布后&#xff0c;所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒&#xff0c;但…

无需删除D盘文件,将D盘空间分给C盘

做深度学习或机器学习的小伙伴&#xff0c;不知不觉就发现自己电脑C盘空间不够用了&#xff0c;但是D盘空间看着又很充裕&#xff0c;那么问题来了&#xff0c;怎么将D盘空间分给C盘呢&#xff0c;网上搜索了一圈&#xff0c;发现很多方法需要删除D盘文件才能将空间分享给C盘&a…

[NOI2019]回家路线

LOJ3156 题面就不放了 , 放一下数据范围 . 看到 \(n<2000,m<4000\) 就想到直接 \(dfs\) 到底 , 居然就过了前 \(4\)个 样例 , 最后一个要 \(2s\) . 后来写了 \(AB0\) 的 \(5\) 分 , 我知道写的是错的 , 还是交了以下这份代码 . ( LOJ 数据应该是官方数据 ) 得分 \(70\) .…

重定位——重定位的简介与操作(涉及位置无关码)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;位置无关码、位置有关码 - biaohc - 博客园 一、链接地址与运行地址 1、链接地址 链接地址&#xff0c;是指程序员通过Makefile中“ -Ttext xxx ”或者在链接脚本中指定的地址…

前端手册

一直觉得前端开发缺个手册&#xff0c;这是个体力活。不过总得有人来干。 今天闲来无事&#xff0c;把一些工具(online和client的)、常用网址、以及经验总结等罗列出来和大家分享下。这个标题起地大了点&#xff0c;肯定会有很多地方没列到&#xff0c;包括类目的分法也可能考虑…

如何随机选取1000个关键字

Q:给定一个数据流&#xff0c;其中包含无穷尽的搜索关键字&#xff08;比如&#xff0c;人们在谷歌搜索时不断输入的关键字&#xff09;。如何才能从这个无穷尽的流中随机的选取1000个关键字&#xff1f; A:首先定义长度为1000的数组&#xff0c;将前1000个关键字放置到数组中。…

重定位——链接脚本的简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 链接脚本基本语法_Nerazzur的博客-CSDN博客_链接脚本语法&#xff08;推荐&#xff09; 链接脚本语法_ABCamus的博客-CSDN博客_链接脚本语法 链接地址、运行地址、加载地址、存储地址_嵌入…

OpenCV学习(27) 直方图(4)

我们可以利用OpenCV的直方图&#xff0c;backproject直方图和meanshift算法来跟踪物体。下面通过简单的例子来说明如何实现跟踪算法&#xff0c;我们有两幅狒狒的图片&#xff0c;如下图所示&#xff1a;我们首先在左图中框选狒狒的脸&#xff0c;计算出框选区域的色度(HSV空间…

IIS启用页面Gzip压缩实现说明

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。 HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。 压缩的最大好处就是降低了网络传输的数据量&#xff0c;从而提高客户端浏览器的访问速度。 当然&#xff0c;同时也会增加一点点服务器的负担。G…

MySQL源码编译与初始化

MySQL源码编译与初始化 链接&#xff1a;https://pan.baidu.com/s/1ANGg3Kd_28BzQrA5ya17fQ 提取码&#xff1a;ekpy 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1.MySQL简介 1.1数据库有很多种类&#xff1a; 关系型数据库--->MySQL Oracle非关系型数据库…

uboot中的虚拟地址映射

1、DRAM有效范围 &#xff08;1&#xff09;DMC0上允许的地址范围是20000000-3FFFFFFF&#xff08;一共是512MB&#xff09;&#xff0c;而X210开发板实际只接了256MB物理内存&#xff0c;SoC允许我们给这256MB挑选地址范围。在裸机中DMC0的地址范围是0x20000000-0x2FFFFFFF&am…

.net remoting 技术

Remoting编辑目 录 1简介 2主要元素 3两种通道 4激活方式 5对象定义 6服务器 7客户 8基础补充 9小结 1简介 什么是Remoting&#xff0c;简而言之&#xff0c;我们可以将其看作是一种分布式处理方式 。从微软的产品角度来看&#xff0c;可以说Remoting就是DCOM的一种升级&#x…

浪客剑心:位图法Bitmap算法分析

看了博客园里一篇文章《一道腾讯前端试题&#xff0c;谁来试试身手》&#xff0c;正好以前了解过位图法&#xff0c;确实不错。位图法适用于大规模数据&#xff0c;但数据状态又不是很多的情况。通常是用来判断某个数据存不存在&#xff0c;如可标记1为存在&#xff0c;0为不存…

性能监控工具javamelody与spring的集成

详细信息可以访问javamelody的官方网站 我在集成的过程中&#xff0c;一直出现commonHibernateDao的加载问题&#xff0c; 另外&#xff0c;根据官方文档&#xff0c;如果你的应用与monitoring-spring.xml或者AOP之类的有冲突&#xff0c;那么使用monitoring-spring-datasource…

tar命令:Linux下的解压与压缩命令

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、必选且只选其一的参数 -c&#xff0c;表示创建压缩文件&#xff0c;c代表create -x&#xff0c;表示解压缩文件 -t&#xff0c;表示查看压缩包里面的文件 -r&#xff0c;向压缩归档文件末尾追加文件 -u…