一、前言

  这题看上去相当唬人(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. 手机uc浏览器,获取到图片,但左上有小图标的问题

    手机uc浏览器有个坑 获取不到图片,左上是这样的

  2. kotlin查看编译后的Java代码

    java学一下kotlin,由于用的是同样的jvm,那就说明他们的字节码文件应该是一样的,那么,如果我们能看到编译后的文件,那么学的更快了. 操作 1.打开一个.kt文件 2.在Android Stu ...

  3. 映射部署tomcat

    近期遇到问题总结[映射部署]2017年10月03日 10:16:54 守望dfdfdf 阅读数:108更多个人分类: Java知识编辑版权声明:本文为博主原创文章,转载请注明文章链接. https:/ ...

  4. JVM虚拟机 - Class类文件结构

    概述 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎都是程序运行的必要数据 ...

  5. 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式

    一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...

  6. 提高jquery加载速率(有cdn就加载,没有就加载本地)

    <!-- Adds google cdn reference --> <script src="https://cdn.bootcss.com/jquery/3.2.1/j ...

  7. Js/Jquery获取input file的文件名

    html代码:     <input type="file" name="file" id="file" class="in ...

  8. 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强

    本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见I ...

  9. linux设置history历史记录

    #说明export HISTSIZE=1000 #设置历史记录显示1000行export HISTTIMEFORMAT='%F %T ' #设置历史记录格式 999 2017-08-15 10:58: ...

  10. 如何查看与显示oracle表的分区信息

    显示分区表信息 显示数据库所有分区表的信息:DBA_PART_TABLES 显示当前用户可访问的所有分区表信息:ALL_PART_TABLES 显示当前用户所有分区表的信息:USER_PART_TAB ...