[bzoj2863] 愤怒的元首
发布时间:2020-12-14 04:29:28 所属栏目:大数据 来源:网络整理
导读:bzoj题目链接(权限题) 前置知识:容斥原理 题解 求 (n) 个点的 (DAG) (有向无环图)的个数。 设 (f(i)) 为 (i) 个点的 (DAG) 的个数。 对于 (n) 个点的 (DAG) 的个数,考虑至少有 (i) 个入度为 (0) 的点的方案为: [ f(n-i) binom{n}{i
bzoj题目链接(权限题) 前置知识:容斥原理 题解 求(n)个点的(DAG)(有向无环图)的个数。 设(f(i))为(i)个点的(DAG)的个数。 对于(n)个点的(DAG)的个数,考虑至少有(i)个入度为(0)的点的方案为: 然后要求的是至少(0)个入度为(0)的点的方案数,由容斥原理可得: #include<bits/stdc++.h> using namespace std; #define int long long void read(int &x) { x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f; for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f; } void print(int x) { if(x<0) x=-x,putchar('-'); if(!x) return ;print(x/10),putchar(x%10+'0'); } void write(int x) {if(!x) putchar('0');else print(x);putchar('n');} #define maxn 10050 #define mod 1000000007 int qpow(int a,int x) { int res=1; for(;x;x>>=1,a=a*a%mod) if(x&1) res=res*a%mod; return res; } int f[maxn],fac[maxn],ifac[maxn]; signed main() { int n;read(n);fac[0]=ifac[0]=1; for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod; ifac[n]=qpow(fac[n],mod-2); for(int i=n-1;i;i--) ifac[i]=ifac[i+1]*(i+1)%mod; f[1]=f[0]=1; for(int i=2;i<=n;i++) for(int j=1,op=-1;j<=i;j++) op*=-1,f[i]=(f[i]+op*f[i-j]*qpow(2,j*(i-j))%mod*fac[i]%mod*ifac[i-j]%mod*ifac[j]%mod)%mod; write((f[n]+mod)%mod);//cerr << (double)clock()/CLOCKS_PER_SEC << endl; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |