HDU5952 Counting Cliques 暴搜优化
一、前言
这题看上去相当唬人(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 暴搜优化的更多相关文章
- HDU5952 Counting Cliques (暴力深搜+剪枝) (2016ACM/ICPC亚洲赛区沈阳站 Problem E)
题目链接:传送门 题目: Counting Cliques Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total S ...
- HDU5952 Counting Cliques计算完全图的个数 巧妙构图+dfs
题目传送门 题目大意:给出n个点,m条无向边,让你计算这幅母图中有几个大小为s的完全图. 完全图的意思是任意一个点都和其他点直接相连,完全图的大小指的就是完全图点的个数. 思路:比较巧妙的构图方式.我 ...
- hdu5952 Counting Cliques 技巧dfs
题意:一个有N个点M条边的图,球其中由S个点构成的团的个数.一个团是一个完全子图. 没有什么好办法,只有暴力深搜,但是这里有一个神奇的操作:将无向图转为有向图:当两个点编号u<v时才有边u-&g ...
- 【算法系列学习】巧妙建图,暴搜去重 Counting Cliques
E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/y ...
- hdu 5952 Counting Cliques 求图中指定大小的团的个数 暴搜
题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进 ...
- Sicily1317-Sudoku-位运算暴搜
最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC ...
- hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)
Mines Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 【Luogu】P1312Mayan游戏(暴搜)
题目链接 由于是暴搜题,所以这篇博客只讲怎么优化剪枝,以及一些细节. 模拟消除思路:因为消除可以拆分成小的横条或竖条,而这些条的长度至少为三,所以一块可消除的区域至少会有一个中心点.这里的中心点可以不 ...
- P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)
题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...
随机推荐
- rabbitmq的总结
rabbitmq的术语 组件 Server(broker):接收客户端连接,实现AMQP消息队列的路由功能的进程.简单来说就是消息队列服务器实体. Vhost:虚拟主机,一个broker里可以开设多个 ...
- 在Controller方法执行之前进行捕获请求,进行类型的转换
@ExceptionHandler(TypeMismatchException.class) public ModelAndView ParseException(Excetion ex,HttpSe ...
- 上机练习2 生成计算机ID
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- Java并发基础:线程的创建
线程的创建和管理: 1.应用Thread类显式创建.管理线程 2.应用Executor创建并管理线程. 定义任务: 无返回的任务:实现Runnable接口并编写run()方法. 有响应的任务:实现Ca ...
- Regexp:常用的几个正则表达式
1.isEmail /** * * @desc 判断是否为邮箱地址 * @param {String} str * @return {Boolean} */ function isEmail(str) ...
- 从github克隆内容到本地时权限问题
从github克隆内容到本地时权限问题
- Redis单机数据库
单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redis ...
- POI 怎么设置Excel整列的CellStyle啊
POI 怎么设置Excel整列的CellStyle啊,而不是循环每个Cell.因为现在是生成Excel模板,不知道客户会输入多少行. 问题补充: 指尖言 写道 好像没有这个方法,CellStyle是C ...
- 【BZOJ3994】[SDOI2015] 约数个数和(莫比乌斯反演)
点此看题面 大致题意: 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^N\sum_{j=1}^Md(i·j)\). 莫比乌斯反演 这是一道莫比乌斯反演题. 一个重要的性质 首先 ...
- 2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序
//冒泡排序 public class demo{ public static void main(String[] args) { int[] sum={2,9,10,1,5,88}; System ...