有一些常见的模型转换,对于求恰好类型的题目
可以通过转化成不大于的形式。
对于这题,我们转化成不大于的情况后,可以利用容斥原理求出答案
我们定义为用不大于k种颜色染色
这样通过容斥原理就能求出恰好是k的答案。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e5+10; const int mod=1e9+7; int n,m,k; ll qpow(ll a,ll b){ ll res=1; while(b){ if(b&1){ res=res*a%mod; } b>>=1; a=a*a%mod; } return res; } ll c(ll n,ll r){ if(n<r) return 0; if(n-r<r) r=n-r; ll a=1,b=1; for(int i=0;i<r;i++) a=(a*(n-i))%mod,b=(b*(i+1))%mod; return a*qpow(b,mod-2)%mod; } int main(){ ios::sync_with_stdio(false); int t; cin>>t; while(t--){ cin>>n>>m>>k; ll ans=0; ll tmp=1; for(int i=k;i>=1;i--){ ans=(ans+tmp*i%mod*qpow(i-1,n-1)%mod+mod)%mod; tmp=-tmp*i%mod*qpow(k-i+1,mod-2)%mod; } ans=(ans*c(m,k))%mod; cout<<ans<<endl; } }