hdu 5917
题意:给你一个无向图,问图中有多少个符合条件的集合?条件为这个集合里面存在一个子集(大小>=3)为团或者都是孤立点。答案mod1e9+7;
根据 Ramsey定理,大于等于6个的集合,肯定存在一个子集的边都是红色或者都是蓝色,即为团还是为孤立点;
所以当n大于等于6的时候,所有的取6个或六个以上的子集的集合都是符合的,所以将这些排列组合的方式全部都计算在内;
即C(n,i) i的取值范围为(6~n) 但是这样子算会超时,我们可以计算C(n,i) i从0开始计算,这样子所有的数加起来,就是2^n
然后再减去C(n,i)i从0到5即可;
n的取值范围到50,所以暴力不超时;
然后还剩下点集为3到5的情况,这个时候,我们就分别枚举点集为3,4,5,判断是否满足情况即可(题目给出的m条边就在这个时候起作用)
只要满足图中有3个为孤立点即可;
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int M = 1e2+;
const LL mod = 1e9+;
int ncase,n,m,cas=;
int vis[M][M];
LL fac[M];
void init()
{ ///预处理阶乘
fac[]=;fac[]=;
for (int i=;i<M;i++)
fac[i]=fac[i-]*i%mod;
}
LL quick_pow(LL p,LL k) ///快速幂
{
LL res=,tp=p;
if(k<) return ;
while(k){
if(k&) res=res*tp%mod;
tp=tp*tp%mod;
k>>=;
}
return res;
}
LL C(int n,int m)
{
return fac[n]*quick_pow(fac[m],mod-)%mod*quick_pow(fac[n-m],mod-)%mod;
}///费马小定理求逆元+快速幂
int judge(int i,int j,int k){ ///判断三点之间满不满足不稳定点集
if(vis[i][j]&&vis[i][k]&&vis[j][k]) return ;///三点之间相连
if(!vis[i][j]&&!vis[i][k]&&!vis[j][k]) return ; ///三点之间不互联
return ;
}
int judge1(int i,int j,int k,int l)
{
if(judge(i,j,k)||judge(i,j,l)||judge(j,k,l)||judge(i,k,l)) return ; ///表示4个点中有三个点为不稳定点集就行,为什么呢?
///因为时题目要求的,不稳定点集为3个点。
return ;
}
int judge2(int i,int j,int k,int l,int o){
///表示5个点中有4个点满足就行
if(judge1(i,j,k,l)||judge1(i,j,k,o)||judge1(i,j,l,o)||judge1(j,k,l,o)||judge1(i,k,l,o)) return ;
return ;
} int main(){ init();
scanf("%d",&ncase);
while(ncase--){
scanf("%d%d",&n,&m);
memset(vis,false,sizeof(vis));
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
vis[u][v]=vis[v][u]=;
}
LL ans=;
if(n>=){
ans=(ans+quick_pow(,n))%mod; ///多项式定理C(n,0)+C(n,1)+...+C(n,n)=2^n
///C(n,k)(k>=6)表示,从n个中取k个出来,总存在一个不稳定点集的个数(三点之间互联或三点之间不连)
for(int i=;i<;i++) ///减去前5个
ans=(ans-C(n,i)+mod)%mod;
}
if(n>=){ ///暴力取3个
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
for(int k=j+;k<=n;k++)
if(judge(i,j,k)) ans=(ans+)%mod;
}
if(n>=){ ///暴力取4个
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
for(int k=j+;k<=n;k++)
for(int l=k+;l<=n;l++)
if(judge1(i,j,k,l)) ans=(ans+)%mod;
}
if(n>=){ ///暴力取5个
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
for(int k=j+;k<=n;k++)
for(int l=k+;l<=n;l++)
for(int o=l+;o<=n;o++)
if(judge2(i,j,k,l,o)) ans=(ans+)%mod;
}
printf("Case #%d: %lld\n",cas++,ans);
}
return ;}
hdu 5917的更多相关文章
- HDU 5917 Instability ramsey定理
http://acm.hdu.edu.cn/showproblem.php?pid=5917 即世界上任意6个人中,总有3个人相互认识,或互相皆不认识. 所以子集 >= 6的一定是合法的. 然后 ...
- HDU - 5917 水题
题意:n个点m条边,找点集个数,点集满足有任意三个点成环,或者三个点互不相连 题解:暴力复杂度O(n^5/120*O(ok))==O(能过) //#pragma comment(linker, &qu ...
- 近几年ACM/ICPC区域赛铜牌题
2013 changsha zoj 3726 3728 3736 3735 2013 chengdu hud 4786 4788 4790 2013 hangzhou hdu 4770 4771 47 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- 持续更新phpstorm h和pycharm 激活码
1.hosts文件写入 0.0.0.0 account.jetbrains.com0.0.0.0 www.jetbrains.com 2.激活码: AHD9079DKZ-eyJsaWNlbnNlSWQ ...
- 汇桔网被曝拖欠12月份工资至今,强制买产品,CEO称去年交易额超400亿
三言财经消息,近日有汇桔网员工爆料,汇桔网拖欠12月工资至今,通知延迟到4月才发放. 此外爆料还指出,"各种手法逼迫大家离开,员工要么继续忍受,要么主动离职,要么停薪留职.都不同意只能仲裁. ...
- 关于所学,及JNI问题
上周每天学习Java两个小时,随后两个小时里对教材上的例子进行验证,学会了如何使用Javac对文件进行终端编译,输出,但由于所下载的 jdk版本问题出现了JNI问题,正在尝试解决.并学会了如何使用ec ...
- STL入门学习中碰到的一些函数
2020.02.10 fill #include<algorithm> vector<int> v{ 1, 2, 3, 3 }; fill(v.begin(), v.end() ...
- 【笔记】机器学习 - 李宏毅 - 8 - Backpropagation
反向传播 反向传播主要用到是链式法则. 概念: 损失函数Loss Function是定义在单个训练样本上的,也就是一个样本的误差. 代价函数Cost Function是定义在整个训练集上的,也就是所有 ...
- jrtp 使用
jrtplib-3.11.1 使用jthread-1.3.3 # cmake 下载https://cmake.org/download/ 使用地址https://github.com/j0r1/JRT ...
- c++编程之内存模型
我们在编程的时候,无可避免要申明变量,在这个变量可以是在()中,可以在{}中,也可以直接在外面,也可以用new的方式.那么当我们在申明变量的时候,实质上我们所做的工作是:关联了一个内存模型! 上代码: ...
- 什么人适合学习Django?
什么人适合学习Django? 我觉得如果你能满足以下2个条件,你就可以果断地选择Django了. 你喜欢Python, 你对Web开发有热情. 学习Python和Django并不难,最重要的是你是否对 ...
- mnist识别优化——使用新的fashion mnist进行模型训练
今天通过论坛偶然知道,在mnist之后,还出现了一个旨在代替经典mnist数据集的Fashion MNIST,同mnist一样,它也是被用作深度学习程序的“hello world”,而且也是由70k张 ...
- [CTSC2008]网络管理 [树剖+整体二分]
这题的复杂度可以到达惊人的\(\log^4\)据说还能跑过去(差点没吓死我 直接二分+树剖树套树(\(n \log^4 n\)) 一个\(\log\)也不少的4\(\log\) 但是我有个\(\log ...