ZOJ 3604 Tunnel Network(凯莱定理)

题目链接:

E - Tunnel Network

 ZOJ - 3604 

题目大意:

给定编号1-n的点,和给定编号1-S 的联通图,刚开始1号联通图只有 1个顶点,就是编号为1的顶点,2号联通图也只有1个顶点,编号为2的顶点,同理 3,4,5知道s; 
剩下的顶点还有 s+1,s+2,s+3,….到n; 
这些点你可以随机分配,以连边的方式加入到S个联通图里, 
现在问。。。最后由N个点构成的森林。。种类,方案数有多少?

凯莱定理讲解:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html

https://blog.csdn.net/qq_31664927/article/details/51705923

这两个配着理解就好了。

对于这个题,我们转化为purfer 数列的时候,因为那一层前n-s-1个我们是可以从1-n里面选的,但是n-s个就必须是1-中的了。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define inf 0x3f3f3f3f
 5 const int mod = 1e9+7;
 6 const int maxn = 3e4+100;
 7 int main(){
 8 int T;
 9 scanf("%d",&T);
10 while(T--){
11 ll n,s;
12 scanf("%lld %lld",&n,&s);
13 ll ans=s;
14 for(int i=1;i<=n-s-1;i++){
15 ans=(ans*n)%mod;
16 }
17 printf("%lld\n",n==s?1ll:ans);
18 }
19 return 0;
20 }

 

posted @ 2019-04-26 21:23  Let_Life_Stop  阅读(311)  评论(0编辑  收藏  举报