HDU 5952 Counting Cliques(dfs)

xiaoxiao2021-02-28  80

题意:

给出一个图,询问有多少个大小为s的完全图

思路:

题中给出提示,数据很小,而且每个点的边也不多,在搜的时候枚举一点,之后用新加的点与之前的点做一个判断,如果都有边就继续搜,否则退出

#include <stdio.h> #include <vector> #include <algorithm> #include <cstring> using namespace std; const int maxn=105; vector<int>vec[maxn]; int mp[maxn][maxn]; int n,m,s; int ans; int vis[maxn]; int cnt; void dfs(int u,int ced) { if(ced==s) { ans++; return ; } for(int i=0;i<vec[u].size();i++) { int t=vec[u][i]; int ok=1; for(int j=1;j<=ced;j++) { int v=vis[j]; if(mp[v][t]==0) { ok=0; break; } } if(ok) { vis[ced+1]=t; dfs(t,ced+1); vis[ced+1]=0; } } } int main() { int t; scanf("%d",&t); while(t--) { memset(mp,0,sizeof(mp)); ans=0; scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=n;i++) vec[i].clear(); for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); if(u>v) swap(u,v); mp[u][v]=mp[v][u]=1; vec[u].push_back(v); } for(int i=1;i<=n;i++) { vis[1]=i; dfs(i,1); vis[1]=0; } printf("%d\n",ans); } }

转载请注明原文地址: https://www.6miu.com/read-52922.html

最新回复(0)