HDU - 5952 Counting Cliques
Counting Cliques
OJ-ID:
hdu-5952
author:
Caution_X
date of submission:
20191110
tags:
dfs,graph
description modelling:
给定点数,边数,问包含有x个点的完全图种类数
major steps to solve it:
(1)选择一个点作为起点,记录该起点的所有连通点,dfs(该点)此时完全图有两个点
(2)遍历(1)中选定点的连通点,若构成完全图,则dfs(能够与(1)的图构成完全图的点)此时完全图有三个点 以此类推 当完全图点数=x时结束dfs
(3)重复(2)操作直到所有点都被作为起点使用过
warnings:
因为每一个起点都满足含有[2,x]个点的完全图,因此,不同起点达到x个点时的完全图相互独立
AC code:
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<bitset>
using namespace std;
const int maxn = ;
int s,ans;
bool mp[maxn][maxn];
/*
这里的dfs看起来很简单,其实包含了一个很大的剪枝:在遍历某个点的时候,已经确定了已经加入团的点是与这个点相连的,还可以知道平均下来每个点的入度不会超过20,
因此整个遍历的复杂度最高是C(9,20)*100
*/
void dfs(int mx,int v[],int cnt){
int nxt[maxn];
if(cnt==s) {ans++;return;}
for(int i=;i<mx;i++){ //枚举能与点数为cnt的团构成点数为cnt+1的团的所有点
int len=;
for(int j=i+;j<mx;j++){
if(mp[v[i]][v[j]]){ //该团的所有"候选点"必须与已经选了的点相连
nxt[len++]=v[j];
}
}
dfs(len,nxt,cnt+);
}
}
int main(){
int T,n,m,u,v;
// freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&s);
memset(mp,,sizeof(mp));
for(int i=;i<m;i++){
scanf("%d%d",&u,&v);
mp[u][v]=mp[v][u]=;
}
ans=;
int nxt[];
for(int i=;i<=n;i++){ //枚举每个点,这个点必须在所求的团里面,以这个点开始搜索
int len=;
for(int j=i+;j<=n;j++){
if(mp[i][j]){ //该团的所有"候选点"必须与已经选了的点相连
nxt[len++]=j;
}
}
dfs(len,nxt,);
}
printf("%d\n",ans);
}
return ;
}
HDU - 5952 Counting Cliques的更多相关文章
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5952 Counting Cliques(dfs)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 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 求图中指定大小的团的个数 暴搜
题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进 ...
- hdu 5862 Counting Intersections
传送门:hdu 5862 Counting Intersections 题意:对于平行于坐标轴的n条线段,求两两相交的线段对有多少个,包括十,T型 官方题解:由于数据限制,只有竖向与横向的线段才会产生 ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- 【算法系列学习】巧妙建图,暴搜去重 Counting Cliques
E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/y ...
- hdu 5952 连通子图
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- python学习-加载配置文件
import configparser # 实例化cp = configparser.ConfigParser() # 加载配置文件cp.read("my_config.conf" ...
- 最简单的 Java内存模型 讲解
前言 在网上看了很多文章,也看了好几本书中关于JMM的介绍,我发现JMM确实是Java中比较难以理解的概念.网上很多文章中关于JMM的介绍要么是照搬了一些书上的内容,要么就干脆介绍的就是错的.本文试着 ...
- 《Java基础知识》Java类的基本运行顺序
我们以下面的类来说明一个基本的 Java 类的运行顺序: public class Demo { private String name; private int age; public Demo() ...
- 安装react-native-cli工具(三)
设置淘宝镜像 (这一步可以省略) npm config set registry https://registry.npm.taobao.org --global npm config set dis ...
- NPOI 工作簿一般设置
HSSFWorkbook workbook = new HSSFWorkbook(); //声明一个空白的工作簿,也可以将已有文件转化为文件流作为参数声明一个工作簿,这样这个工作簿里就会有已有文件中的 ...
- JS---案例:美女时钟
案例:美女时钟 思路: 打开页面就有图片按每秒1张的顺序轮换,用到了日期对象,获取小时和秒. 封装到一个命名函数后,为了使页面打卡就有图片的轮换,先调用下f1,再设置setInterval <! ...
- 查询BPC动态表
今天BASIS说后台有张数据表(/1CPMB/ABLBCAD)数据量已超过20亿,需要归档,但是不清楚是哪个业务模型. 有两种方式可以查询BPC动态生成的表名. (1)根据命名规则 环境前缀:apps ...
- Android 状态栏通知 Notification
private NotificationManager manager; private Notification.Builder builder; @Override protected void ...
- VS2019 开发Django(二)------hello world!
导航:VS2019开发Django系列 第一篇介绍了安装Django,那么,今天的主题内容是使用VS编写第一个Django应用. 1)新建Django Web项目 选择新建Django Web项目,在 ...
- JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范
文档下载地址:JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范