一、前言

  这题看上去相当唬人(NPC问题),但是 因为限制了一些条件,所以实际上并没有太唬人。

二、题目

  给你一个图,要求你找出数量为S的团的数量。

三、题解

  暴搜,再加上一些玄学优化。

  优化1:使用链表来优化图

  优化2:使用mapp【】【】来进行标记

  优化3:使用inline、define来进行优化

  优化4:无向图只从小节点指向大节点,优化边的数量

  优化5:初始化时使用精确控制memset字节数

//#include<bits/stdc++.h>
#include<stdio.h>
// #include<iostream>
#include<string.h>
// using namespace std;
#include<math.h> #define ll long long
#define min(a,b) a<b ? a:b
#define max(a,b) a>b ? a:b const ll MAXN=; class Node
{
public:
int to,next;
};
Node G[MAXN*];
int fst[],size; inline void add(int const&from,int const&to)
{
G[size].next=fst[from];
G[size].to=to;
fst[from]=size++;
}
int n,m,s,cnt;
bool mapp[][];
int ans[MAXN]; inline bool check(int tar,int deep)
{
for(int i=;i<deep;++i)
{
if(!mapp[ans[i]][tar])return false;
}return true;
} void dfs(int now,int deep)
{
if(deep==s)
{
cnt++;
return ;
}
for(int i=fst[now];i!=-;i=G[i].next)
{
int tar=G[i].to;
if(tar<=now)continue;
if(check(tar,deep))
{
ans[deep]=tar;
dfs(tar,deep+);
}
}
} void init()
{
size=;
scanf("%d%d%d",&n,&m,&s);
memset(fst,-,*(n+));
memset(mapp,,sizeof(mapp));
for(int i=;i<m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
add(min(a,b),max(a,b));
mapp[min(a,b)][max(a,b)]=;
}
cnt=;
for(int i=;i<=n;++i)ans[]=i,dfs(i,);
printf("%d\n",cnt);
} int main()
{
int t;
scanf("%d",&t);
// cin>>t;
while(t--)init();
}

HDU5952 Counting Cliques 暴搜优化的更多相关文章

  1. HDU5952 Counting Cliques (暴力深搜+剪枝) (2016ACM/ICPC亚洲赛区沈阳站 Problem E)

    题目链接:传送门 题目: Counting Cliques Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total S ...

  2. HDU5952 Counting Cliques计算完全图的个数 巧妙构图+dfs

    题目传送门 题目大意:给出n个点,m条无向边,让你计算这幅母图中有几个大小为s的完全图. 完全图的意思是任意一个点都和其他点直接相连,完全图的大小指的就是完全图点的个数. 思路:比较巧妙的构图方式.我 ...

  3. hdu5952 Counting Cliques 技巧dfs

    题意:一个有N个点M条边的图,球其中由S个点构成的团的个数.一个团是一个完全子图. 没有什么好办法,只有暴力深搜,但是这里有一个神奇的操作:将无向图转为有向图:当两个点编号u<v时才有边u-&g ...

  4. 【算法系列学习】巧妙建图,暴搜去重 Counting Cliques

    E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/y ...

  5. hdu 5952 Counting Cliques 求图中指定大小的团的个数 暴搜

    题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进 ...

  6. Sicily1317-Sudoku-位运算暴搜

    最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC ...

  7. hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)

    Mines Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  8. 【Luogu】P1312Mayan游戏(暴搜)

    题目链接 由于是暴搜题,所以这篇博客只讲怎么优化剪枝,以及一些细节. 模拟消除思路:因为消除可以拆分成小的横条或竖条,而这些条的长度至少为三,所以一块可消除的区域至少会有一个中心点.这里的中心点可以不 ...

  9. P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)

    题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...

随机推荐

  1. How to Install VMware Tools on RHEL 7/CentOS 7

    The original address Mware Tools is one of important components for virtual machine (VM) in order ge ...

  2. 移动开发,Webapp 淘宝手机 rem 布局

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt ="orientationchange"in w ...

  3. 30分钟学会React Hook, Memo, Lazy

    我们来学习React 16.8里的新特性. 1. 自行配置好React的环境,推荐你使用Create React APP, 你也可以下载本文档Zip解压到本地直接运行. https://github. ...

  4. C 碎片四 流程控制

    前面介绍了程序中用到的一些基本要素(常量,变量,运算符,表达式),他们是构成程序的基本成分,下面将介绍C语言中流程控制的三种结构:顺序结构.分支结构.循环结构 一.顺序结构 顺序结构的程序设计是最简单 ...

  5. springboot 学习笔记(八)

    springboot整合activemq,实现queue,topic同时支持 1.JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subs ...

  6. 会话跟踪之Session

    Session是服务端使用记录客户端状态的一种机制,Session使用简单,但是和Cookie相比,增加了服务器的存储压力[因为为了追求速度,服务器将Session放置在了内存中].Cookie是保存 ...

  7. 自定义列表dl

    语法格式 <dl> <dt>名词1</dt> <dd>名词1解释1</dd> <dd>名词1解释2</dd> ... ...

  8. filter 拦截ajax请求

    1.filterpublic class SessonFilter implements Filter { private static Logger log = LoggerFactory.getL ...

  9. MATLAB之数据处理+公式拟合

    MATLAB之数据处理+公式拟合 前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式. 试验数据背景 本次试验有三个自变量:V.M.G,因变量为F,每组试验重复 ...

  10. Java正则表达式—小应用—简易爬虫

         在上一篇中,学习了正则表达式的四个功能.即匹配.分割.替换.获取. 利用获取功能,可以实现简单的网页爬虫. 4,获取:将字符串中的符合规则的子串取出. 获取功能的操作步骤: 1,将正则表达式 ...