题意:

根据离散数学的内容知道,一个二元关系是一个二元有序组<x, y>的集合。

然后有一些特殊的二元关系,比如等价关系,满足三个条件:

  • 自反性,任意的x,都有二元关系<x, x>
  • 对称性,如果有<x, y>则有<y, x>
  • 传递性,如果有<x, y>和<y, z>,则有<x, z>

现在要统计满足后两条,但不满足第一个条件的二元关系的个数。

题中的证明是对的:

If , then (according to property (2)), which means (according to property (3)).

但是前提条件不一定存在,比如对于a,没有一个b满足那么后面的推导就无从谈起了。

不妨把这些不和其他元素(包括自己)产生二元关系的元素称作「空」的。

只要至少有一个「空」的元素,而且其他的元素都在某个等价类里面,就满足题目中的要求。

枚举非「空」元素的个数k(1 ≤ k ≤ n),选出k个元素有C(n, k)中方案,再乘上将k个元素划分为若干个等价类的方案数eq[k],累加起来就是答案。

eq数组可以这样计算:

设d(i, j)为将i个元素划分为j个不同等价类的方案数,d(i, j) = d(i-1, j) * j + d(i-1, j-1) //考虑第i个数加入已有的j个等价类,或者自己成为一个新的等价类

那么eq[i] = sum{ d(i, j) | 0 ≤ j ≤ i }

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. typedef long long LL;
  8.  
  9. const int maxn = + ;
  10. const LL MOD = ;
  11.  
  12. LL C[maxn][maxn], d[maxn][maxn];
  13.  
  14. void add(LL& x, LL y)
  15. {
  16. x += y;
  17. if(x >= MOD) x -= MOD;
  18. }
  19.  
  20. int main()
  21. {
  22. int n; scanf("%d", &n);
  23.  
  24. for(int i = ; i <= n; i++) C[i][] = C[i][i] = ;
  25. for(int i = ; i <= n; i++)
  26. for(int j = ; j < i; j++) C[i][j] = (C[i-][j] + C[i-][j-]) % MOD;
  27.  
  28. d[][] = ;
  29. for(int i = ; i <= n; i++)
  30. for(int j = ; j <= i; j++) d[i][j] = (d[i-][j] * j + d[i-][j-]) % MOD;
  31.  
  32. LL ans = ;
  33. for(int i = ; i < n; i++)
  34. {
  35. LL eq = ;
  36. for(int j = ; j <= i; j++) add(eq, d[i][j]);
  37. ans = (ans + C[n][i] * eq) % MOD;
  38. }
  39.  
  40. printf("%I64d\n", ans);
  41.  
  42. return ;
  43. }

代码君

CodeForces 568B DP Symmetric and Transitive的更多相关文章

  1. codeforces 569D D. Symmetric and Transitive(bell数+dp)

    题目链接: D. Symmetric and Transitive time limit per test 1.5 seconds memory limit per test 256 megabyte ...

  2. Codeforces 568B Symmetric and Transitive

    http://codeforces.com/contest/568/problem/B 题意:题意还挺绕的,其实就是说:要你求出一个图,要求保证其中有至少一个点不连任何边,然后其他连边的点构成的每个联 ...

  3. Two Melodies CodeForces - 813D (DP,技巧)

    https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...

  4. Consecutive Subsequence CodeForces - 977F(dp)

    Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...

  5. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  6. Codeforces 721C [dp][拓扑排序]

    /* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...

  7. CodeForces 607C (DP) Hard problem

    题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...

  8. Codeforces 611d [DP][字符串]

    /* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...

  9. Codeforces 404D [DP]

    /* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...

随机推荐

  1. 通过Maven构建打包Spring boot,并将config配置文件提取到jar文件外

    如果通过不同的IDE打包,着实会觉得依赖性太大,并且容易出现错误,操作也比较复杂 同时,spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行的需求. 这 ...

  2. Echarts获取数据绘制图表

    这次是利用mui框架实现一个手机移动端的项目.基本的框架已经实现,主要来获取数据实现一个图表的展示. 首先引入插件:echarts.js <script src="../resourc ...

  3. Android GreenDao操作外部DB数据库文件

    1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...

  4. redis-----字符串操作的复杂度

    命令 含义 复杂度 set key value 设置key-value o(1) get key 获取key-value o(1) del key 删除key-value o(1) setnx set ...

  5. Azure 镜像市场支持一键部署到云

    本视频教程介绍了Azure 镜像市场和一键部署到云. Azure 镜像市场(AMP)由世纪互联运营,是一个联机应用程序和服务市场,它通过独立软件服务商(ISV)能够成为 Azure 客户(Custom ...

  6. SingletonLoginUser

    package cn.com.jgt.view{ import flash.errors.IllegalOperationError; /** * actionscript类的构造方法不能是priva ...

  7. 安装新版REDIS

    http://redis.io/ # wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz -C ...

  8. HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴什博弈)

    思路:若能给对方留下m+1,就可以胜.否则败. #include <iostream> using namespace std; int main() { int t,n,m;cin> ...

  9. 洛谷 P1784 数独

    题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复.每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无 ...

  10. 让您的 VS 2012/2013 升级开发 .NET 4.6 -- Targeting the .NET Framework 4.6 (多目标包)

    原文出处:让您的 VS 2012/2013 升级开发 .NET 4.6 -- Targeting the .NET Framework 4.6 (多目标包) http://www.dotblogs.c ...