Description

saruka有一座大大的城堡!城堡里面有n个房间,每个房间上面都写着一个数字p[i]。有一天,saruka邀请他的小伙伴LYL和 MagHSK来城堡里玩耍(为什么没有妹子),他们约定,如果某一个人当前站在i号房间里,那么下一步他就要去p[i]号房间,在下一步就要去 p[p[i]]号房间。

为了增加趣味性,saruka决定重新书写一下每个房间的p[i],以满足:

<1>如果从编号为1-k的某个房间走,按照规则走,必须能走回1号房间。特别的,如果从1号房间开始走,也要走回1号房间。(至少走一步,如果p[1] = 1,从1走到1也算合法)

<2>如果从编号大于k的房间开始,按照规则走,一定不能走到1号房间。

saruka想知道,一共有多少书写p[i]的方案可以满足要求?

Input

共一行两个数字n,k,含义如题。

Output

一个数字,表示合法的方案数。答案对10 ^ 9 + 7取模。

Sample Input

5 2
7 4

Sample Output

54
1728

Hint

1 <= n <= 10 ^ 18

1 <= k <= min(8,n)

题解

很显然这道题我们要分治考虑,即分为$[1,k]$和$[k+1,n]$两个区间的点来计算。

首先我们很容易的知道后面这个区间的个数是${(n-k)}^{n-k}$,因为后面的点不能与$[1,k]$的点连,并且可以随便连,不用管是否连通。

那么我们现在考虑前面的$k$个点。我们想:首先这个图是一个典型的基环内向树,既然所有的点都能到达$1$号点,那么这个$1$号点肯定在基环上,并且整个图都是连通的。

我们来考虑这个问题:怎样构成这个图呢?

我们先假设只有$n-1$条边,那么使图要连通的话,显然构成了一棵树且根节点为$1$;因为边是有向的,显然所有边的方向是从儿子节点到父节点。

现在我们加上忽略的这条边,显然我从$1$号根节点连向任意一个节点都是可以的(包括根节点)。

我们拓展到一般的情况如果$1$号点不一定是根节点:那么我们只要把根节点连向$1$号点的位置就可以了。

我们得出这样一个结论:只要构成了一棵树,我都有方法使它满足条件,并且无论根节点是什么。并且我们能够得到,一个无向树确定了根节点,我都有办法确定方向使它们指向根。

带编号的点的无根生成树我们想到了$Cayley$公式,不知道的可以戳我之前写的一篇博客:->戳我<-

我们可以得到$n^{n-2}$棵无根树,并且我所有的点都可以确立为根,那么在每种形态下,我又有了$n$个版本。

那么前一部分的方案数就是$k^{k-1}$。

根据乘法原理:最终答案就是$k^{k-1}*{(n-k)}^{n-k}$。

 //It is made by Awson on 2017.10.12
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define sqr(x) ((x)*(x))
using namespace std;
const LL MOD = 1e9+; LL n, k; LL quick_pow(LL a, LL b) {
LL sum = ;
a %= MOD;
while (b) {
if (b&) sum = sum*a%MOD;
b >>= ;
a = a*a%MOD;
}
return sum;
}
void work() {
scanf("%lld%lld", &n, &k);
LL ans1 = quick_pow(k, k-);
LL ans2 = quick_pow(n-k, n-k);
printf("%lld\n", ans1*ans2%MOD);
}
int main() {
work();
return ;
}

[Luogu 2817]宋荣子的城堡的更多相关文章

  1. [Luogu] P2817 宋荣子的城堡

    题目描述 saruka有一座大大的城堡!城堡里面有n个房间,每个房间上面都写着一个数字p[i].有一天,saruka邀请他的小伙伴LYL和MagHSK来城堡里玩耍(为什么没有妹子),他们约定,如果某一 ...

  2. P2817 宋荣子的城堡

    P2817 宋荣子的城堡一道找规律的题,现在深入追究发现了有趣的东西.1 12 23 94 64显然k^(k-1) 在日照的时候也推出来了.3 9今天推错了,要列出所有的情况,然后再选,否则会漏掉.答 ...

  3. [luogu] P3202 [HNOI2009]通往城堡之路(贪心)

    P3202 [HNOI2009]通往城堡之路 题目描述 听说公主被关押在城堡里,彭大侠下定决心:不管一路上有多少坎坷,不管城堡中的看守有多少厉害,不管救了公主之后公主会不会再被抓走,不管公主是否漂亮. ...

  4. [Luogu 2816]宋荣子搭积木

    Description saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过saruka的是特殊的积木了,这些积木都非常智能,第i块积木有 ...

  5. 洛谷—— P1457 城堡 The Castle

    https://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特 ...

  6. VIJOS-P1059 积木城堡

    洛谷 P1504 积木城堡 https://www.luogu.org/problem/P1504 JDOJ 1240: VIJOS-P1059 积木城堡 https://neooj.com/oldo ...

  7. P1504 积木城堡

    原题链接  https://www.luogu.com.cn/problem/P1504 闲话时刻 这道题是一道 暴力 dp好题,dp 的方法和平常的不大一样,也许是我的脑回路清奇,总之还是值得做一下 ...

  8. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  9. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

随机推荐

  1. java 中的JDK封装的数据结构和算法解析(集合类)----顺序表 List 之 ArrayList

    1. 数据结构之List (java:接口)[由于是分析原理,这里多用截图说明] List是集合类中的容器之一,其定义如下:(无序可重复) An ordered collection (also kn ...

  2. Alpha冲刺——Day2

    一.合照 二.项目燃尽图 三.项目进展 图形界面基本完成 接口文档框架完成,接下来将会不断细化填充 登录界面向服务器请求数据进行ing 四.明日规划 1.注册登录接口能够完成 2.研究idea实现获得 ...

  3. 软件工程网络15团队作业1——团队组队&展示

    Deadline: 2018-3-25 10:00PM,以提交至班级博客时间为准. 申请开通团队博客,并将团队博客地址发表在本次随笔的评论中 团队展示 根据5-6人的组队要求,每个队伍创建团队博客并发 ...

  4. js计时功能

    //个位秒加 function time4jia() { //分钟60为上限 所有加停止 if (sz(a('time1').innerHTML) == 6) { return; } var m4 = ...

  5. C#系统服务安装

    转载 http://blog.csdn.net/vvhesj/article/details/8349615 1.1创建WindowsService项目 导入需要的引用比如System.configu ...

  6. java异常常见面试问题

    java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...

  7. 一个诚实的孩纸选Python的原因

    我之所以会选择python语言程序设计这门课,是因为我一开始预选选的选修课都没选上,然后在补选的时候,在别人选剩的课里面选择了python. 上了两节课之后,我发现python还挺有意思的,挺喜欢py ...

  8. NHibernate的基本使用

    一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...

  9. yum 安装Apache

    1.查看是否安装Apache,命令:  rpm    -qa    httpd 2.yum install httpd ,yum安装Apache 3.chkconfig    httpd  on  s ...

  10. 在Linux的Terminal中显示文本文件特定行的内容

    假设要操纵的文本文件的文件名是 textFile现在想做的事情是在不以编辑模式打开文件的情况下在终端直接提取并输出指定文本文件的指定行的内容 在终端提取指定文本文件的指定行的内容 Tool Comma ...