hdu5952 Counting Cliques

news/2024/11/29 8:02:35/

一个关于图的需要dfs+剪枝的暴力题,想了半天没什么思路,后来室友和我说的想法。

因为给你一个图,数大小为s的联通图的个数,连通图就是所有的点两两相连通,首先遍历i从1~n,找到和i相邻的点,如果 i 的度数大于s-1,那么把所有和 i 相邻并且度数大于s-1的点加入到一个队列(数组)中,对这个队列进行dfs找联通图的个数就行了。

一个是要想到怎么遍历的,另外一个就是dfs函数怎么写。

#include<bits/stdc++.h>
using namespace std;int gra[105][105],cnt[105],num[105],a[105]; //建立一个num来存点i的符合条件的相邻点,cnt来存每个点的度数
int n,m,s;int check(int t,int x) { //检查加入的点是不是都联通for(int i = 1;i < t;i++)if(gra[a[i]][x] == 0)return 0;return 1;
}long long dfs(int dd,int cc,int count) { //检查相邻点中有几个联通图,dd为下标,cc为num数组的长度,count为加入点的个数if(count == 0) return 1;long long ret = 0;for(int i = dd;i <= cc-count+1;i++) {a[s-count+1] = num[i];if(check(s-count+1,num[i]))ret += dfs(i,cc,count-1);}return ret;
}int main() {int t;scanf("%d",&t);while(t--) {scanf("%d%d%d",&n,&m,&s);memset(gra,0,sizeof(gra));memset(cnt,0,sizeof(cnt));for(int i = 1;i <= m;i++) {int x,y;scanf("%d%d",&x,&y);gra[x][y] = 1;gra[y][x] = 1;}for(int i = 1;i <= n;i++)for(int j = 1;j <= n;j++)cnt[i] += gra[i][j]; //计算该点的度数long long ans = 0;int cc;for(int i = 1;i <= n;i++) {if(cnt[i] >= s-1) {num[1] = i;cc = 1;for(int j = i+1;j <= n;j++) {  //加入符合条件的与i相邻的点if(gra[i][j] && cnt[j] >= s-1)num[++cc] = j;}}if(cc < s) continue;/*for(int i = 1;i <= cc;i++)printf("%d ",num[i]);printf("end\n");*/a[1] = num[1];ans += dfs(2,cc,s-1);}printf("%I64d\n",ans);}
}

还是写出来了,dfs不够熟练,继续刷数位dp!嗯


http://www.ppmy.cn/news/363394.html

相关文章

HDU-5952 Counting Cliques ,爆搜!

Counting Cliques 题意&#xff1a;给你n个点&#xff0c;m条边&#xff0c;求大小为s(s<10)的团有多少个&#xff0c;每个点的度最多20。 看到数据这么小&#xff0c;想着各种bitset暴力&#xff0c;想着把3元团预处理&#xff0c;再预处理4元团等等。写了两个多小时发现复…

hdu 5952 Counting Cliques(dfs优化)

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5952 题意&#xff1a; 给一n个点m条边的图&#xff0c;找一个有s个顶点的完全子图。 分析&#xff1a; 对于每个s点完全子图&#xff0c;如果i点在子图中&#xff0c;那么就枚举与i有边的其他点&#xff0c;每加入…

利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

一、FFmpeg简介。 二、FFmpeg常用参数及命令。 三、FFmpeg在Unity 3D中的使用。   1、FFmpeg 录屏。   2、FFmpeg 推流。   3、FFmpeg 其他功能简述。 一、FFmpeg简介 对于FFmpeg&#xff0c;其官网上是这样介绍的&#xff1a; FFmpeg is the leading multimedia fram…

hdoj 5952 Counting Cliques

题目链接&#xff1a;Counting Cliques 题目大意&#xff1a;给你一张n个点,m条边的无向图&#xff0c;问尺寸为s的完全图有多少个&#xff0c;尺寸即为这张完全图有多少个点&#xff0c;完全图是值每两点之间都有边 题目思路&#xff1a;这题吃时间吃的比较紧&#xff0c;想…

HDU 5952 搜索

题意 给一个无向图&#xff0c;所有点的度小于等于20。问这个图中有多少个完全子图。 题解 完全图就是一个图任意两点之间都有边相连。由于所有点的度都很小&#xff0c;我们可以暴力枚举完全图。 枚举过程首先从1号点开始&#xff0c;然后枚举与1号点相邻的点&#xff0c;…

HDU 5952

题意:给出一个无向图, 问其中的结点数为s的完全图有多少个 思路:我最初的思路是不管重复直接搜,然后最后答案除一个s的阶乘, 但是超时, 后来发现其实可以不算重复的, 就是将搜索有序化, 举个例子: 你现在有4个数 4 2 3 1, 那么你要选出其中3个, 那么选择的顺序就是 4 2 3 ,…

HDU5952

题目链接&#xff1a; HDU 5952 题意&#xff1a;给一个N个点M条边的的图&#xff0c; 求有多少个大小为S 的完全子图&#xff0c; &#xff08;题目trick&#xff1a;一个点度最多为20&#xff09;&#xff0c; 爆搜即可 &#xff08;需要单向建图&#xff08;U->V &…

HDU 5952 Counting Cliques dfs + 思维

传送门&#xff1a;HDU5952 题意&#xff1a;给出一个无向图&#xff0c;问其中点集大小为S的无向完全子图的个数。 思路&#xff1a;就是暴搜&#xff0c;但是建图有技巧&#xff0c;因为搜索过程中很容易出现重复序列&#xff0c;比如我们第一次搜到的答案是1 2 3&#xff…