HDU 5952 [DFS]
题目链接:【http://acm.hdu.edu.cn/showproblem.php?pid=5952】
题意:给出一张无向图,然后判断这张图中一共有多少个不同的大小为S的完全图,并且保证每个点的度不大于20。
题解:好吧,比赛的时候想太多了,结果时间刚不住,TTTT。正解其实很简单,就一个DFS。每次建立DFS(u),表示u在的大小为S的完全图个数,为了保证不重复,我们只建立单向边。每层DFS的时候,取一个点,当且仅的这个点与之前的所有点选过的点有边相连(神优化)。总复杂度是100 * 100 * (2 ^ 19) ,但是,应为边很少,所以,复杂度要少很多。
思维僵化啊。
#include<Bits/stdc++.h>
using namespace std;
const int maxn = 105;
int T, N, M, S;
struct Edge
{
int to, next;
Edge() {}
Edge(int to, int next): to(to), next(next) {}
} E[2050];
int head[maxn], tot;
int mp[maxn][maxn], vis[maxn], tmp[maxn];
int ans = 0;
void initEdge()
{
for(int i = 0; i <= N; i++) head[i] = -1;
tot = 0;
}
void addEdge(int u, int v)
{
E[tot] = Edge(v, head[u]);
head[u] = tot++;
}
void DFS(int u, int pos)
{
if(pos == S)
{
ans++;
return ;
}
for(int k = head[u]; ~k; k = E[k].next)
{
int v = E[k].to;
bool fg = true;
for(int i = 0; i < pos && fg; i++)
if(!mp[v][tmp[i]]) fg = false;
if(fg)
{
tmp[pos] = v;
DFS(v, pos + 1);
}
}
return ;
}
int main ()
{
scanf("%d", &T);
while(T--)
{
scanf("%d %d %d", &N, &M, &S);
initEdge();
for(int i = 1; i <= N; i++)
{
vis[i] = 0;
for(int j = i + 1; j <= N; j++)
mp[i][j] = mp[j][i] = 0;
}
for(int i = 1; i <= M; i++)
{
int u, v;
scanf("%d %d", &u, &v);
addEdge(u, v);
mp[u][v] = mp[v][u] = 1;
}
if(S == 2)
{
printf("%d\n", M);
continue;
}
ans = 0;
for(int i = 1; i <= N; i++)
{
tmp[0] = i;
DFS(i, 1);
} printf("%d\n", ans);
}
return 0;
}
HDU 5952 [DFS]的更多相关文章
- HDU - 5952 Counting Cliques
Counting Cliques HDU - 5952 OJ-ID: hdu-5952 author:Caution_X date of submission:20191110 tags:dfs,gr ...
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Counting Cliques HDU - 5952 单向边dfs
题目:题目链接 思路:这道题vj上Time limit:4000 ms,HDU上Time Limit: 8000/4000 MS (Java/Others),且不考虑oj测评机比现场赛慢很多,但10月 ...
- HDU - 5952 Counting Cliques(DFS)
A clique is a complete graph, in which there is an edge between every pair of the vertices. Given a ...
- HDU - 5952 Counting Cliques(dfs搜索)
题目: A clique is a complete graph, in which there is an edge between every pair of the vertices. Give ...
- HDU 5952 Counting Cliques(dfs)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
随机推荐
- HashSet的特性介绍
HashSet除了在元素的存储上是无序的以外,还是不能够存储重复的元素. HashSet如何判断元素是否重复呢?是根据元素继承的两个方法来判断,hashCode和equals,当存储元素时,首先判断要 ...
- 【CodeForces】866D. Buy Low Sell High
[题意]已知n天股价,每天可以买入一股或卖出一股或不作为,最后必须持0股,求最大收益. [算法]堆 贪心? [题解] 不作为思想:[不作为=买入再卖出] 根据不作为思想,可以推出中转站思想. 中转站思 ...
- 【CodeForces】901 B. GCD of Polynomials
[题目]B. GCD of Polynomials [题意]给定n,要求两个最高次项不超过n的多项式(第一个>第二个),使得到它们GCD的辗转次数为n.n<=150. [算法]构造 [题解 ...
- 20155117王震宇 2006-2007-2 《Java程序设计》第一周学习总结
20155117王震宇 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的 ...
- 旋转3D立方体
<!DOCTYPE html><html><head> <title>css-3d-盒子</title> <meta charset= ...
- Javascript装饰器的妙用
最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西.装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 ...
- php常用函数——数组函数
php常用函数——数组函数
- flask插件系列之flask_session会话机制
flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制. 配置参数详解 SESSION_COOKIE_NAME 设置返回给客户端的c ...
- Python 生成随机数
import random x = int(input('Enter a number for x: ')) --随机数最小值y = int(input('Enter a number for y: ...
- 解决su – 后显示-bash-4.1#
<1>现象 设置tfs的管理用户时. su - admin时,出现 -bash-4.1# <2>解决 chown admin:admin /home/admin ...