hdu5917 Instability(ramsey定理)
来源:互联网 发布:云视通网络监控怎么用 编辑:程序博客网 时间:2024/06/07 00:31
hdu5917
题目
给你一个无向图,问图中有多少个符合条件的集合?条件为这个集合里面存在一个子集(大小>=3)为团或者都是孤立点。答案mod1e9+7
思路
Ramsey定理的通俗表述:
6 个人中至少存在3人相互认识或者相互不认识。
该定理等价于证明这6个顶点的完全图的边,用红、蓝二色任意着色,必然至少存在一个红色边三角形,或蓝色边三角形。
超过6就用定理
3-5就枚举所有情况来判断。
比赛的话还是要猜+找规律
代码
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <vector>using namespace std;typedef long long ll;const ll mod= 1e9+7;int ma[55][55];ll fact[55],ans;int n,m;vector<int> v;int ok(){ int flag=0; for(unsigned int i=0; i<v.size(); i++) { for(unsigned int j=i+1; j<v.size(); j++) { for(unsigned int k=j+1; k<v.size(); k++) { int a=v[i]; int b=v[j]; int c=v[k]; if(ma[a][b]&&ma[a][c]&&ma[b][c]) { flag=1; } if(!ma[a][b]&&!ma[a][c]&&!ma[b][c]) { flag=1; } if(flag) return 1; } if(flag) return 1; } if(flag) return 1; } return 0;}void init(){ fact[0]=1; for(int i=1; i<=50; i++) fact[i]=fact[i-1]*i%mod;}ll qpow(ll a,ll n){ ll ans=1; while(n) { if(n&1) ans=ans*a%mod; a=a*a%mod; n>>=1; } return ans;}ll C(int n,int m){ return fact[n]*qpow(fact[m],mod-2)%mod*qpow(fact[n-m],mod-2)%mod;}int main(){ init(); int T,kase=1; scanf("%d",&T); while(T--) { memset(ma,0,sizeof(ma)); ans=0; scanf("%d %d",&n,&m); for(int i=0; i<m; i++) { int a,b; scanf("%d %d",&a,&b); ma[a][b]=ma[b][a]=1; } if(n>=6) for(int i=6; i<=n; i++) ans=(ans+C(n,i))%mod; int flag; if(n>=3) { for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { for(int k=j+1; k<=n; k++) { v.clear(); v.push_back(i); v.push_back(j); v.push_back(k); if(ok()) { ans+=1; ans%=mod; } } } } } if(n>=4) { for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { for(int k=j+1; k<=n; k++) { for(int h=k+1; h<=n; h++) { v.clear(); v.push_back(i); v.push_back(j); v.push_back(k); v.push_back(h); if(ok()) { ans+=1; ans%=mod; } } } } } } if(n>=5) { for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { for(int k=j+1; k<=n; k++) { for(int h=k+1; h<=n; h++) { for(int p=h+1; p<=n; p++) { v.clear(); v.push_back(i); v.push_back(j); v.push_back(k); v.push_back(h); v.push_back(p); if(ok()) { ans+=1; ans%=mod; } } } } } } } ans%=mod; printf("Case #%d: %I64d\n",kase++,ans); } return 0;}
0 0
- hdu5917 Instability(ramsey定理)
- HDU 5917 Instability (ramsey定理)
- [hdu 5917 Instability] Ramsey定理
- HDU5917 Instability
- Instability(Ramsey定理+快速幂)
- HDU 5917 Instability(Ramsey定理)
- ramsey定理 : HDU-5917 Instability、 HDU-6152 Friend-Graph
- ramsey定理
- Ramsey定理
- Ramsey定理
- HDU 5917:Ramsey定理
- Instability
- Instability
- 鸽巢原理以及Ramsey定理详解
- hdu6152(拉姆齐(Ramsey)定理) Friend-Graph
- 鸽巢原理以及Ramsey定理详解
- Hdu 6152 Friend-Graph(Ramsey定理)
- HDU6152 Friend-Graph 数学|签到|Ramsey定理
- Linux下的系统调用列表
- 连通性问题的快速查找解决方案(C语言实现)
- 【39.77%】【codeforces 724B】Batch Sort
- IOS一些有用的macro
- 电脑后台终端操作指令大全
- hdu5917 Instability(ramsey定理)
- 14. YAML(1)
- 怎么使用DeBug深入源码
- Unity设计模式个人总结,开闭原则总结
- 如何区分虚拟网卡和物理网卡?
- HDU 1575
- 将阶乘的结果保存到文件中(文件操作)
- 绩点啊, 贼high
- 欢迎使用CSDN-markdown编辑器