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 ;
}

最新文章

  1. sqlserver表分区
  2. MVC 构建图片/文件选择器 参考其它CMS功能
  3. 烂泥:nginx同时支持asp.net与php
  4. Server 2003序列号
  5. erlang尾递归的概括
  6. appium获取android app的包名和主Activity
  7. wget https://github.com/xxx/yyy/archive/${commit_hash}.zip
  8. 使用Sunny-grok实现内网转发
  9. python 递归函数
  10. MySQL数据库远程访问的权限
  11. Facebook React Native 配置小结
  12. zepto的返回顶部scrollTop的动画解决方法
  13. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路
  14. 【翻译】Siesta事件记录器入门
  15. 记录下mainfest.json 原生标题的按钮监听
  16. Game Engine Architecture 3
  17. 外部访问docker容器(docker run -p/-P 指令)
  18. 关于python访问字典的方法
  19. NOI-1.1-04输出保留3位小数的浮点数
  20. python time 和 datetime 模块

热门文章

  1. javascript 随机显示指定内容
  2. java中的对象
  3. 关于php的flush在本机正常在服务器不灵的问题
  4. Onsen UI 前端框架(二)
  5. SharePoint 切换用户的小技巧
  6. iOS开发之数据存储之Core Data
  7. CSS写动态下拉菜单 -----2017-03-27
  8. 深入hibernate的三种状态
  9. html中引入调用另一个html的方法
  10. 老李分享:robotium常用API 1