bzoj 2863: 愤怒的元首

4人阅读 评论(0) 收藏 举报
分类:

Description

Pty生活在一个奇葩的国家,这个国家有n个城市,编号为1~n。
每个城市到达其他城市的路径都是有向的。
不存在两个城市可以互相到达。
这个国家的元首现在很愤怒,他大喊一声“气死偶咧!”,然后决定把所有的路径都毁掉再重建。
元首想知道有多少种重建的方案使得这个国家仍然奇葩。

Input

第一行一个整数:n

Output

输出n个城市的重建方案数mod(10^9+7)的结果
Hint:基图不连通也是合法方案

Sample Input

3

Sample Output

25

HINT

n <= 3000

Solution

我们可以设f[i]表示i个节点组成的DAG个数,
有一个显然的性质,一个DAG去掉入度为0的点后,仍然为一个DAG。
于是我们可以枚举新增的入度为0的点,
至少有j个入度为0的点的方案数为Cij2j(ij)f[ij]
因为选出j个点的方案为Cij,中间有j*(i-j)条可以连或不连,剩下的点组成DAG的方案为f[i-j],于是乘起来就好了。


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

#define N 3030
#define P 1000000007
#define LL long long

LL f[N],c[N][N];
int n;

int rc(int x)
{
    if (x%2==0) return 1;
      else return -1;
}

LL ksm(LL x,int k)
{
    if (k==0) return 1;
    if (k==1) return x;
    LL t=ksm(x,k/2);
    if (k%2==1) return t*t%P*x%P;
      else return t*t%P;
}

int main()
{
    scanf("%d",&n);
    c[1][0]=c[1][1]=1;
    for (int i=2;i<=n;i++)
    {
        c[i][0]=1;
      for (int j=1;j<=i;j++)
        c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;
    }
    f[0]=1; f[1]=1;
    for (int i=2;i<=n;i++)
      for (int j=1;j<=i;j++)
        f[i]=(f[i]+(rc(j-1)*(c[i][j]%P*ksm(2,j*(i-j))%P*f[i-j]%P))+P)%P;
    printf("%lld\n",f[n]);
    return 0;
}

查看评论

[bzoj2863]愤怒的元首

题目大意求n个带编号结点组成的合法DAG个数。递推我们设f[i]表示i个带编号结点组成的合法DAG的个数。 如果删去DAG中所有入度为0的结点,接下来的DAG也是一个合法DAG。 但我们不知道有多...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016-04-18 20:15:03
  • 715

BZOJ2863 愤怒的元首

2863: 愤怒的元首 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 114  Solved: 70 [Submit][Status][Dis...
  • PrimoPan
  • PrimoPan
  • 2017-09-03 15:40:55
  • 115

BZOJ2863: 愤怒的元首

很明显这一题就是要求DAG组合数 问了tangjz 他直接甩给我一个公式… 不敢问证明感觉根据块的大小分一下可以搞出来? 有一个公式: A[i]=∑ik=1(−1)k−1Cki2k∗(i−k)...
  • liutian429073576
  • liutian429073576
  • 2016-04-18 15:18:13
  • 355

bzoj 2863: 愤怒的元首 容斥原理+dp

题意求n个带编号的点组成的DAG数量。 n
  • qq_33229466
  • qq_33229466
  • 2017-12-26 21:50:58
  • 89

[LOJ6259][CodePlus 2017 12 月赛]白金元首与独舞-矩阵树定理

白金元首与独舞题目描述到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin。可是…… 可是如果 Stalin 把自己当作炸弹扔到地堡花园里来了...
  • zlttttt
  • zlttttt
  • 2017-12-24 23:54:36
  • 183

[组合 容斥 DP] BZOJ 2863 愤怒的元首

题解:http://blog.csdn.net/werkeytom_ftd/article/details/51182412 我们设f[i]表示i个带编号结点组成的合法DAG的个数。  如果删...
  • u014609452
  • u014609452
  • 2016-04-20 16:18:17
  • 353

SXOJ843 迷失的奶牛

#include #include using namespace std; int fam,cow,dis,tot; bool dir; int main() { scanf("%d %d",&...
  • Legend4ever
  • Legend4ever
  • 2017-10-23 20:19:08
  • 62

Code+三月月赛 Div1 D 白金元首与莫斯科(插头dp)

[CODE+]白金元首与莫斯科 题面 如果说障碍格子已经确定,那么可以用一个简单的插头dp算出方案数。 那么可以暴力枚举障碍格子,但这样是O(n2m22m)O(n2m22m)O(n^2m^2...
  • Mogician_Evian
  • Mogician_Evian
  • 2018-03-06 23:13:43
  • 33

bzoj2863 愤怒的元首 [dp+容斥原理]

Description: 求nnn个点构成dagdagdag数量。 Solution: 考虑g[i]g[i]g[i]表示当前iii个点构成dagdagdag数量。由于dagdagdag有出度...
  • pocket_lengend
  • pocket_lengend
  • 2018-03-28 12:56:45
  • 18

十大下台元首之谜chm书籍

  • 2009年10月20日 18:13
  • 220KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 6096
    积分: 713
    排名: 6万+