[组合数+bell数] codeforces 569D. Symmetric and Transitive

原创 2016年05月31日 22:37:56

D. Symmetric and Transitive
题意:
一个集合Sn个元素,问它上面的二元关系的数量,要求二元关系满足对称性和传递性,不满足自反性。
题解:
学过离散应该知道,二元关系就是笛卡尔积S×S的子集。
开下脑洞可以想象一个n节点的有向完全图,并且对任意节点我们加上一个自环,任意边的组合就是一个关系,可以看出只要一个关系包含了所有自环,那么这个关系就有自反性。
再想想的话,假如(1,2)(2,1)满足关系P,那么如果不满足关系(1,1)(2,2)的话,那就不满足传递性了,因为根据传递性的定义,1P22P11P1,所以假如我们没有包含x的自环,那么任意x的边都不应该包含。
现在问题就变成了一个n个节点的有向完全图(加入自环),任选k(k>=1)个点去掉,剩下的图中边的任意合法组合(满足自反和对称和传递,满足自反是因为已将不满足的先选出来了),回到集合的角度看,满足自反对称传递就是等价关系,也就是算出去掉k(k>=1)个元素后集合的等价关系的个数,这就是贝尔数了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 4005;
const ll mod = 1e9+7;
ll C[N][N], bell[N][N];
void cm(ll& x){ if(x >= mod) x -= mod; }
void init(){
    for(int i = 0; i < N; ++i){
        C[i][0] = 1;
        for(int j = 1; j <= i; ++j){
            C[i][j] = C[i-1][j-1] + C[i-1][j];
            cm(C[i][j]);
        }
    }
    bell[1][1] = 1;
    for(int i = 2; i < N; ++i){
        bell[i][1] = bell[i-1][i-1];
        for(int j = 2; j <= i; ++j){
            bell[i][j] = bell[i][j-1]+bell[i-1][j-1];
            cm(bell[i][j]);
        }
    }
}
int main(){
    init();
    ll ans = 0, n;
    cin >> n;
    for(int i = 1; i <= n; ++i){
        ans += C[n][i]*bell[n-i][n-i]%mod;
        cm(ans);
    }
    cout << ans << endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Codeforces Round #315 (Div. 2)569D Symmetric and Transitive(dp)

D. Symmetric and Transitive time limit per test 1.5 seconds memory limit per test 256 megabytes ...
  • GKHack
  • GKHack
  • 2015年08月12日 08:51
  • 1079

codeforces 568B B. Symmetric and Transitive(贝尔数+组合数学)

题目链接:codeforces题目大意:给出n,代表集合元素个数,求出满足传递性和对称性但不满足自反性的集合的数目。题目分析:我们可以将这个集合看作一个无向图,也就是对于每个联通块当中的点都是满足这三...
  • qq_24451605
  • qq_24451605
  • 2015年08月14日 14:36
  • 1039

codeforces 627 problem A 好题呀,感觉学到了挺多的 亦或

A. XOR Equation time limit per test 2 seconds memory limit per test 256 megabytes input standa...
  • zcj5027
  • zcj5027
  • 2016年03月24日 21:11
  • 744

Codeforces 584B Kolya and Tanya 【组合数学】

题目链接:Codeforces 584B Kolya and Tanya B. Kolya and Tanya time limit per test1 second memory limit ...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2016年04月07日 17:24
  • 282

codeforces568C. New Language

传送门:http://codeforces.com/problemset/problem/568/C 思路:贪心+2-sat判定 先判定原串是否合法,合法就输出原串。 否则贪心地从大到小枚举lc...
  • thy_asdf
  • thy_asdf
  • 2015年10月21日 21:47
  • 351

codeforces 569 D. Symmetric and Transitive (bell数)

D. Symmetric and Transitive time limit per test 1.5 seconds memory limit per test 256 me...
  • whai362
  • whai362
  • 2015年10月01日 13:45
  • 357

Codeforces Round #315 (Div. 1) B. Symmetric and Transitive 斯特林数 贝尔数

B. Symmetric and Transitive time limit per test 1.5 seconds memory limit per test 256 me...
  • u010422038
  • u010422038
  • 2015年08月11日 18:18
  • 1259

CodeForces 568 B.Symmetric and Transitive(dp+生成函数+FFT)

Description 找出nn个点的二元关系中满足对称性和传递性但不满足自反性的个数 Input 一个整数n(1≤n≤4000)n(1\le n\le 4000) Output 输出满足条...
  • V5ZSQ
  • V5ZSQ
  • 2018年01月11日 20:34
  • 75

【CodeForces】222B - Cosmic Tables(思维)

点击打开题目 B. Cosmic Tables time limit per test 3 seconds memory limit per test 256 m...
  • wyg1997
  • wyg1997
  • 2016年07月03日 19:17
  • 195

Bell数的生成函数推导

设为Bell数,即集合{1,2,3,...,n}划分的方案数,易得           令为的指数生成函数,那么有     我们改变n,k求和的顺序,得到     分母n在...
  • ACdreamers
  • ACdreamers
  • 2014年02月09日 14:55
  • 1357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[组合数+bell数] codeforces 569D. Symmetric and Transitive
举报原因:
原因补充:

(最多只允许输入30个字)