HDU - 5952 Counting Cliques (dfs)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU - 5952 Counting Cliques (dfs)相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/ems' title='ems'>ems
vector def ack color ons scan ref tin棰樼洰閾炬帴锛?nbsp;Counting Cliques
棰樻剰锛氫竴涓湁N涓偣M鏉¤竟鐨勫浘锛岀悆鍏朵腑鐢盨涓偣鏋勬垚鐨勫洟鐨勪釜鏁般€備竴涓洟鏄竴涓畬鍏ㄥ瓙鍥俱€?/p>
棰樿В锛氭嬁鍒拌繖棰樻兂浜嗗ソ涔呫€傘€傛病鎯冲埌dfs灏卞畬浜嬩簡銆傚氨dfs涓€涓嬶紝鍥炴函涓€涓嬪氨ok浜嗭紝閾滅墝棰樸€?/p>
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <math.h> using namespace std; #define LL long long #define fi first #define se second #define pb(a) push_back(a) const int MAX_N = 1e2+7; const LL mod = 1e9+7; const int inf = 0x3f3f3f3f; int N,M,T,S; int ans; vector<int> vec[MAX_N]; int mp[MAX_N][MAX_N]; void dfs(int pos,int *sta ,int num){ if(num == S){ ans ++; return ; } for(int i=0;i<vec[pos].size();i++){ int t = vec[pos][i]; bool f = true; for(int j=0;j<num;j++){ if(mp[t][sta[j]] == 0){ f = false; break; } } if(f){ sta[num ++] = t; dfs(t,sta,num); sta[num-1] = 0; num --; } } } int main() { cin>>T; while(T--) { ans = 0; for(int i=0;i<MAX_N;i++){ vec[i].clear(); } memset(mp,0,sizeof(mp)); scanf("%d%d%d",&N,&M,&S); for(int i=0;i<M;i++){ int a,b; scanf("%d%d",&a,&b); if(a > b) swap(a,b); vec[a].push_back(b); mp[a][b] = mp[b][a] = 1; } for(int i=1;i<=N;i++){ int sta[MAX_N]; sta[0] = i; dfs(i,sta,1); } printf("%d ",ans); } return 0; }
以上是关于HDU - 5952 Counting Cliques (dfs)的主要内容,如果未能解决你的问题,请参考以下文章
HDU 5952 Counting Cliques(dfs)
HDU - 5952 Counting Cliques (dfs)