E - 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的更多相关文章

  1. HDU5772 String problem 最大权闭合图+巧妙建图

    题意:自己看吧(不是很好说) 分析: 网络流:最大权闭合子图. 思路如下: 首先将点分为3类 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得 ...

  2. 2018.10.30 NOIP模拟 有环无向图(dijkstra+巧妙建图)

    传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgem ...

  3. UVA1327 && POJ1904 King's Quest(tarjan+巧妙建图+强连通分量+缩点)

    UVA1327 King's Quest POJ1904 King's Quest 题意: 有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚.现有一个匹配表,将每个王子都与一个自己 ...

  4. [ACM] POJ 3686 The Windy&#39;s (二分图最小权匹配,KM算法,特殊建图)

    The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4158   Accepted: 1777 Descr ...

  5. HDU5521 Meeting(dijkstra+巧妙建图)

    HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的 ...

  6. BZOJ4152 The Captain(dijkstra+巧妙建图)

    BZOJ4152 The Captain 题面很简洁: 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. 很明显 ...

  7. 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜

    3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 204  Solved: 154[Submit][Status][Discuss] ...

  8. poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙

    /** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...

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

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

随机推荐

  1. 10分钟精通SharePoint - SharePoint定位

    平台 – "一栋楼房的框架结构" 扩展 – "用户可以根据自己需要随意装修房间"集成 – "插拔式的系统集成能力"业务– "既是全 ...

  2. 第一天—ListView||内容提供者

    ###ListView1.创建一个ListView的控件2.在Layout包中创建一个布局,用来指定ListView每个条目的布局 例:Item3.找到ListView控件4.创建一个类继承适配器三个 ...

  3. El表达式的用法个人总结

    EL表达式的好处: 通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性. EL表达式的几个特点:  1:可以与jsp标签库结合使用,也可以与javascript语 ...

  4. 【子非鱼】插入排序过程呈现之java内置GUI表示

    先给代码,再给过程视频: package com.dyi.wyb.sort; import java.awt.Color; import java.awt.Graphics; import java. ...

  5. lvm的vg扩容

    本次扩容的目的是要扩展 / 的整体容量,具体操作如下: 1.首先查看是否存在未分配的磁盘 [root@NH-Test-44 ~]# fdisk -l Disk /dev/vda: 53.7 GB, 5 ...

  6. 多边形剪裁img

    <!DOCTYPE html><html><head> <meta charset="utf-8"/> <title>& ...

  7. 初窥DB2之insert语句

    第一种写法 INSERT INTO PERSVALUES (12, 'Harris', 20, 'Sales', 5, 18000, 1000, '1950-1-1') 第二种写法 INSERT IN ...

  8. 老李分享:jvm结构简介 1

    老李分享:jvm结构简介     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  9. CF #405 (Div. 2) B. Bear ad Friendship Condition (dfs+完全图)

    题意:如果1认识2,2认识3,必须要求有:1认识3.如果满足上述条件,输出YES,否则输出NO. 思路:显然如果是一个完全图就输出YES,否则就输出NO,如果是无向完全图则一定有我们可以用dfs来书边 ...

  10. Uva 11609 Teams (组合数学)

    题意:有n个人,选不少于一个人参加比赛,其中一人当队长,有多少种选择方案. 思路:我们首先C(n,1)选出一人当队长,然后剩下的 n-1 人组合的总数为2^(n-1),这里用快速幂解决 代码: #in ...