题目大意:
询问有多少个N个点,M条边的有向图,从1号点到达N号点需要经过至少N-1条边。该有向图中可以包含重边和自环。
解题思路:
A c c e p t e d c o d e : Accepted\ code: Accepted code:
#include<cstdio>
#define int long long
using namespace std;
const int ymw = 1e9 + 7;
int N, M, power[10005];
int ksm(int x, int m) {
x %= ymw; int ans = 1;
while (m) {
if (m & 1) (ans *= x) %= ymw;
(x *= x) %= ymw;
m >>= 1;
}
return ans;
}
int C(int x, int y) {
int sum = 1, ans = 1;
for (int i = x - y + 1; i <= x; ++i)
(ans *= i) %= ymw;
for (int i = 1; i <= y; ++i)
sum = sum * ksm(i, ymw-2) % ymw;
return sum * ans % ymw;
}
signed main() {
scanf("%lld %lld", &N, &M);
power[0] = 1;
for (int i = 1; i <= N - 2; ++i)
power[i] = power[i-1] * i % ymw;
printf("%lld\n", C((N * N - C(N-1,2) - 1 + M - N + 1), M - N + 1) * power[N-2] % ymw);
}