题目分析:

对于给出的n个点和m条边,求这个图的完全联通子图的数量(每次查询的子图的大小为s),对于本题而言,很容易想到的是dfs暴力和这个点相连的所有的点,并且判断这个图是否是度为s 的完全联通子图,但是如果不作任何处理的话会超时,这里需要合理选择剪枝,排除不可能的查询

注意点:

1.用in[i]数组表示编号为i的点的度,对于每次判断,如果这个点的度小于s-1这个点就直接放弃

2.对于边之间的关系,u and v (1 ≤ u < v ≤ N),所以对于每次查询,我们从小往大的编号查询即可,这样将无向图转化为有向图减少了查询的次数

3.对于每个编号的有连线的点通过vector存储,这样查询的时候直接查询和这个被选中的点相连的点是否能加入完全联通子图即可

代码:

 #include<iostream>
#include<vector>
#include<string.h>
using namespace std; int mat[][];
int set[];
int in[];
vector<int>edge[];
int ans, s, n, m; void dfs(int last, int num){
if(in[last] < s-) return;
if(num == s){
ans++;
return;
}
for(int i = ; i < edge[last].size(); i++){
int x = edge[last][i];
if(in[x] < s-) continue;
int j;
for(j = ; j <= num; j++){
int from = set[j];
int to = x;
if(mat[from][to] == ) break;
}
if(j > num){
set[num+] = x;
dfs(x, num+);
}
}
} int main(){
int t;
scanf("%d", &t);
while(t--){
scanf("%d%d%d", &n, &m, &s);
for(int i = ; i <= n; i++) edge[i].clear();
memset(mat, , sizeof(mat));
memset(in, , sizeof(in));
for(int i = ; i <= m; i++){
int x, y;
scanf("%d%d", &x, &y);
edge[x].push_back(y);
mat[x][y] = ;
mat[y][x] = ;
in[x]++; //保存每个点的入度 用于剪枝
in[y]++;
}
ans = ;
for(int i = ; i <= n; i++){
set[] = i; //set中第一个元素定下
dfs(i, ); //set中已经有的最后一个编号 已经在set中的编号数
}
printf("%d\n", ans);
}
return ;
}

HDU5952 dfs+剪枝的更多相关文章

  1. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. POJ 3009 DFS+剪枝

    POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...

  3. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

  4. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  5. DFS+剪枝 HDOJ 5323 Solve this interesting problem

    题目传送门 /* 题意:告诉一个区间[L,R],问根节点的n是多少 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - l ...

  6. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. LA 6476 Outpost Navigation (DFS+剪枝)

    题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...

  9. poj 1011 Sticks (DFS+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127771   Accepted: 29926 Descrip ...

随机推荐

  1. Codeforces Round #549 (Div. 2) E 倍增处理按排列顺序的上一个位置

    https://codeforces.com/contest/1143/problem/E 题意 p为n的一个排列,给出有m个数字的数组a,q次询问,每次询问a数组区间[l,r]中是否存在子序列为p的 ...

  2. echarts 中 柱图 、折线图、柱图层叠

    app.title = '折柱混合'; option = { tooltip: { trigger: 'axis', axisPointer: { type: 'cross', crossStyle: ...

  3. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  4. 关于Adobe Premiere Pro视音频不同步的解决方法

    在Potplayer和系统播放器都正常 但Pr里面就是音画不同步 原因是Pr识别错误,让音频比视频快了,这时要将视频后拉一点就ok了

  5. mysql 字段修改汇总

    --  增加 ALTER TABLE `gdm_nursing_patient` ADD COLUMN `due_date` date DEFAULT NULL COMMENT '名称' AFTER ...

  6. C# HTTP系列2 HttpWebReponse类

    系列目录     [已更新最新开发文章,点击查看详细] System.Net.HttpWebReponse 类提供 WebResponse 类的特定于HTTP的实现. 例子 下面的示例返回一个从Htt ...

  7. Makefile的简洁模版

    博客地址:http://www.cnblogs.com/zengjianrong/p/4184854.html 为了方便编译零碎的测试代码,在代码的存放目录编辑了一个Makefile,添加新代码文件后 ...

  8. 局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底

    1. 昨天晚上同事打电话给我说自己的服务器上面的redis无故被清空了,并且查看aof 日志有很多 wget和write指令 一想就是大事不好.局域网中病毒了.. 2. 今天早上到公司忙完一阵简单看了 ...

  9. 基础知识---委托和 lambda

    委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...

  10. 在 ubuntu 下安装 mono 和 xsp4 ,并测试

    1. 安装完 ubuntu 后,在 ubuntu 软件中查看是否自带了 mono 运行时和 XSP4,如果没有,则选中后,点击安装按钮. 2. 安装完后,在终端(类似于 Windows 上的命令行工具 ...