HDU5952
来源:互联网 发布:corel 片头制作软件 编辑:程序博客网 时间:2024/05/19 10:09
题目链接: HDU 5952
题意:给一个N个点M条边的的图, 求有多少个大小为S 的完全子图, (题目trick:一个点度最多为20),
爆搜即可 (需要单向建图(U->V && u < v),这样会不重复)。
#include<bits/stdc++.h>using namespace std;bool vis[105][105];int head[1010];int cnt = 1;int SIZE = 0;int ans = 0;int n,m,s;int now[25];struct node{ int to, next;}edge[1010];void init(){ cnt = 1; SIZE = 1; ans = 0; memset(now, 0, sizeof(now)); memset(vis,false, sizeof(vis)); for(int i=0;i<1010;i++) head[i]=-1;}void addedge(int u, int v){ edge[cnt].to = v; edge[cnt].next = head[u]; head[u] = cnt++;}bool check(int u){ for(int i = 1; i<= SIZE; i++) { if(!vis[now[i]][u]) return false; } return true;}void dfs(int point){ if(SIZE == s) { ans++; return; } for(int i = head[point]; i != -1; i = edge[i].next) { int u = edge[i].to; if(check(u)) { now[++SIZE] = u; dfs(u); SIZE--; } }}int main(){ int t; scanf("%d", &t); while(t--) { init(); scanf("%d%d%d", &n, &m, &s); int u, v; while(m--) { scanf("%d%d", &u, &v); addedge(u ,v); vis[u][v] = vis[v][u] = 1; } SIZE = 1; ans = 0; //now = 1; for(int i = 1 ; i <= n; i++) { SIZE = 0; now[++SIZE] = i; dfs(i); } printf("%d\n", ans ); } return 0;}
阅读全文
0 0
- hdu5952
- HDU5952
- hdu5952 Counting Cliques DFS
- hdu5952 Counting Cliques
- HDU5952-Counting Sheep
- HDU5952(66/600)
- hdu5952 Counting Cliques(爆搜)
- hdu5952 Counting Cliques DFS
- HDU5952 Counting Cliques 沈阳赛
- HDU5952 Counting Cliques(DFS+剪枝)
- hdu5952 Counting Cliques(搜索)
- HDU5952 Counting Cliques(思维+DFS)
- HDU5952(2016沈阳现场赛)
- HDU5952 Counting Cliques 【搜索剪枝】
- HDU5952 Counting Cliques (dfs)
- hdu5952(暴搜+剪枝+铜牌题)
- hdu5952 Counting Cliques 2016 沈阳 1005 vector还是慢
- DFS深度优先搜索-- hdu5952(DFS中巧妙建图防超时)
- express 的router(路由)
- 欢迎使用CSDN-markdown编辑器
- 字符串基本概念
- struct和typedef struct的区别
- 用redis实现分布式锁
- HDU5952
- 软件工程(C编码实践篇) 实验二:命令行菜单小程序V1.0
- STM32寄存器开发-环境搭建
- restful笔记
- == 和===
- 读书笔记【推荐系统实践】
- JavaScript进阶之数组
- python判断谁做了好事
- html和CSS基础学习(九)