【算法系列学习】巧妙建图,暴搜去重 Counting Cliques
http://blog.csdn.net/eventqueue/article/details/52973747
http://blog.csdn.net/yuanjunlai141/article/details/52972715
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue> using namespace std;
const int maxn=;
const int maxm=1e3+;
int n,m,s;
int deg[maxn];
int mp[maxn][maxn];
int Stack[maxn];
int ans;
struct Edge
{
int to;
int next;
}edge[maxm];
int tot,head[maxn];
void add(int u,int v)
{
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void Init()
{
ans=;
tot=;
memset(head,-,sizeof(head));
memset(deg,,sizeof(deg));
memset(mp,,sizeof(mp));
memset(Stack,,sizeof(Stack));
}
bool judge(int a[],int v)
{
for(int i=;i<=a[];i++)
{
if(!mp[v][a[i]])
{
return false;
}
}
return true;
}
void DFS(int a[],int u)
{
if(a[]==s)
{
ans++;
return;
}
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
//判断这个点是不是和每个已有团结点都有边
if(judge(a,v))
{
//入栈
a[++a[]]=v;
DFS(a,v);
a[]--;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
Init();
scanf("%d%d%d",&n,&m,&s);
int u,v;
for(int i=;i<m;i++)
{
scanf("%d%d",&u,&v);
//这是去重的关键
/*用一个数组记录已经存在的团的大小,数组是一个由小到大
的数组,即前点要进入团时,判断该节点是否比团内所有点大,这样就避免了重复,判断大小时只需要判断进最后一个点是否比当前点小就行了
所以建图是可以按照 小的点指向大的点得方式建图,这样会少很多不必要的搜索操作 */
/*之所以可以从小的节点指向大的节点是因为,最后要找的是一个无向完全图,在无向完全图中肯定可以找到一条从小节点依次走到到大节点的有向路:比如1->2->3这样的路,边的双向信息用另一个数组存一下就行了 这样就减少了大量不必要的计算,而且不会重复,因为你在一个无向完全图里只可能找到一个,v1 < v2 < v3 ... < vx
这样的偏序关系的路,不可能再出现例如v2 < v1 < v3 < ... < vx这种路,因为这么多点大小的偏序关系是唯一的,确定了一次,以后都不会重复了,连标记去重都不用,真巧妙!*/
if(u>v)
{
swap(u,v);
}
add(u,v);
mp[u][v]=mp[v][u]=;
//为了剪枝
deg[u]++;
deg[v]++;
}
for(int i=;i<=n;i++)
{
//剪枝,度小于s-1的一定不在团内
if(deg[i]<s-)
{
continue;
}
//模拟栈,Stack[0]保存已经确定的团结点的大小
Stack[]=;
Stack[]=i;
DFS(Stack,i);
}
printf("%d\n",ans);
}
return ;
}
【算法系列学习】巧妙建图,暴搜去重 Counting Cliques的更多相关文章
- HDU5772 String problem 最大权闭合图+巧妙建图
题意:自己看吧(不是很好说) 分析: 网络流:最大权闭合子图. 思路如下: 首先将点分为3类 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得 ...
- 2018.10.30 NOIP模拟 有环无向图(dijkstra+巧妙建图)
传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgem ...
- UVA1327 && POJ1904 King's Quest(tarjan+巧妙建图+强连通分量+缩点)
UVA1327 King's Quest POJ1904 King's Quest 题意: 有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚.现有一个匹配表,将每个王子都与一个自己 ...
- [ACM] POJ 3686 The Windy's (二分图最小权匹配,KM算法,特殊建图)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4158 Accepted: 1777 Descr ...
- HDU5521 Meeting(dijkstra+巧妙建图)
HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的 ...
- BZOJ4152 The Captain(dijkstra+巧妙建图)
BZOJ4152 The Captain 题面很简洁: 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. 很明显 ...
- 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜
3033: 太鼓达人 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 204 Solved: 154[Submit][Status][Discuss] ...
- poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙
/** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...
- hdu 5952 Counting Cliques 求图中指定大小的团的个数 暴搜
题目链接 题意 给定一个\(n个点,m条边\)的无向图,找出其中大小为\(s\)的完全图个数\((n\leq 100,m\leq 1000,s\leq 10)\). 思路 暴搜. 搜索的时候判断要加进 ...
随机推荐
- paoding-rose 了解
paoding-rose 是人人开源的基于 spring 开发的 javaEE 框架.wiki 地址: https://code.google.com/archive/p/paoding-rose/ ...
- oStrictHostKeyChecking=no 参数
应用在脚本当中,避免使用域名链接服务器的时候,检查knows_hosts文件
- Failed to connect to Xilinx hw_server. Check if the hw_server is running and correct TCP port is used.
Failed to connect to Xilinx hw_server. Check if the hw_server is running and correct TCP port is us ...
- ABP入门系列(15)——创建微信公众号模块
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 现在的互联网已不在仅仅局限于网页应用,IOS.Android.平板.智能家居等平台正如 ...
- 第3章Zabbix完整监控
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- 20155215 2016-2017-2 《Java程序设计》第5周学习总结
学号 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 尝试捕捉错误对象,try,catch. 如何抛出错误对象,throw语法. error代表系统错 ...
- CentOs6系统安装及前期为安装Cdh4准备
问题1: 虚拟机工具:VMware Workstation 前提:虚拟机安装使用64位操作系统时涉及到一个CPU虚拟化的问题,如果BIOS没有开启CPU的虚拟化选项,创建和打开64位虚拟机就会报错. ...
- 【Egret】在WebStorm里使用Egret Engine 的注意点
1.开启代码提示 2.修改egret code后,自动编译新egret code 按照下图进行设置: ①打开"File-settings" ② ③ (PS:webstorm打开目录 ...
- 浓缩的才是精华:浅析GIF格式图片的存储和压缩
成文迪, 在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦. GIF格式的历史 GIF(Graphics Interchange Format)原义是"图像互换 ...
- Android内存优化之OOM
内容大多都是和OOM有关的实践总结概要.理解错误或是偏差的地方,还请多包涵指正,谢谢!本人Q:1524447071 (一)Android的内存管理机制 Google在Android的官网上有这样一篇文 ...