HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)
来源:互联网 发布:中建国熙台南京知乎 编辑:程序博客网 时间:2024/05/15 16:56
题目分析
这道题看样子没有什么办法,主要就是有策略的暴力,因为每个点连接的点不超过20个,那么就可以直接进行暴力,但是这样会有很多重复,因此需要剪枝,具体情况就是每次搜过一个点之后就把这个点连接的所有边都删除,这样就跑的很快了。。
#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 105;int vis[maxn][maxn], degree[maxn], Stack[maxn], h, c;int ans;int T, N, M, S;vector <int> vec[maxn];void dfs(int u, int flag){ if(h == S){ ans++; return; } if((vec[u].size()-flag) < (S-h) || flag >= vec[u].size()) return ; int cnt = 0; for(int i = 0; i < h; i++) if(!vis[vec[u][flag]][Stack[i]]){ cnt = 1; break;} if(!cnt){ Stack[h++] = vec[u][flag]; dfs(u, flag+1); h--; } dfs(u, flag+1);}void init(){ memset(Stack, 0, sizeof(Stack)); memset(degree, 0, sizeof(degree)); memset(vis, 0, sizeof(vis)); for(int i = 0; i < maxn; i++) vec[i].clear();}int main(){ scanf("%d", &T); while(T--){ init(); scanf("%d%d%d", &N, &M, &S); int u, v; for(int i = 0; i < M; i++){ scanf("%d%d", &u, &v); vis[u][v] = vis[v][u] = 1; vec[u].push_back(v); vec[v].push_back(u); degree[u]++; degree[v]++; } ans = 0; for(int i = 1; i <= N; i++){ if(degree[i] < S-1) continue; //剪枝 h = 0; Stack[h++] = i; dfs(i, 0); for(int j = 1; j <= N; j++){ //剪枝 if(vis[i][j]){ degree[j]--; vis[i][j] = vis[j][i] = 0; } } } printf("%d\n", ans); } return 0;}
1 0
- HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
- hdu 5952 Counting Cliques(dfs优化) 2016ACM/ICPC亚洲区沈阳站
- HDU 5952 Counting Cliques 爆搜+剪枝+无向转单调有向 2016ACM/ICPC亚洲区沈阳站 E题
- HDU 5950 Recursive sequence(2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
- hdu 5952 Counting Cliques 2016ACM/ICPC沈阳赛区现场赛E
- 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学) HDU 5512 Pagodas
- 【hdu 5521】【 2015ACM/ICPC亚洲区沈阳站重现赛】Meeting 题意&题解&代码
- HDU 5512 Pagodas 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
- hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站-重现赛
- hdu 5521 Meeting 2015ACM/ICPC亚洲区沈阳站-重现赛
- HDU 5512 Pagodas (GCD博弈 + 2015ACM/ICPC亚洲区沈阳站-重现赛)
- HDU-5512 Pagodas(GCD)(2015ACM/ICPC亚洲区沈阳站-重现赛)
- HDU 5950 Recursive sequence(构造矩阵+矩阵乘法)——2016ACM/ICPC亚洲区沈阳站(重现赛)
- 【HDU 5950】【构造矩阵+矩阵幂】 Recursive sequence——2016ACM/ICPC亚洲区沈阳站(重现赛)
- ICPC沈阳站E题 HDU 5952 Counting Cliques 搜索
- 2016ACM/ICPC亚洲区沈阳站-重现赛 部分题解
- 【hdu 5510】【2015ACM/ICPC亚洲区沈阳站-重现赛 】Bazinga 题意&题解&代码(C++)
- CC2530协议栈工作流程
- 第九周 项目二 【对称矩阵压缩存储的实现与应用(1)】
- [模板] Other
- 基于中国剩余定理的加密算法初探
- 栈空间和堆空间大小
- HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)
- 【我的Android进阶之旅】如何在浏览器上使用Octotree插件树形地展示Github项目代码?
- Java-关键字
- Java多态性详细举例说明(很经典例子)
- 什么是DOM,DOM level 1\2\3 的区别是什么?
- Java开发工具_Eclipse中如何删除项目和导入项目
- 八种基本排序算法总结
- Java测试--安全测试#目录
- Android 小項目之--項目如何安裝至手機使用