范围这么小一看就是暴力。
直接爆的话会T
每个点从小到大,找出包括这个点的所有满足的团,按照这样的方向,可以保证找过的点一定不会再找。
#include <bits/stdc++.h>
using namespace std;
int m[105][105];
vector<int>es[1111];
int N, M, S;
int ans;
int E;
int s;
int v[1111];
bool check(int x) {for(int i = 1 ; i <= s ; i++) {if(!m[v[i]][x])return false;}return true;
}
void dfs(int x) {if(s == S) {ans++;return ;}for(int i = 0 ; i < es[x].size() ; i++) {if(check(es[x][i])) {v[++s] = es[x][i];dfs(es[x][i]);s--;}}
}
void Init() {ans = 0;E = 0;memset(m,0,sizeof(m));memset(v,0,sizeof(v));for(int i = 0 ; i< 1000; i++) es[i].clear();
}
int main() {int T;cin >> T;int from, to;while(T--) {Init();cin >> N >> M >> S;for(int i = 0 ; i < M ; i++) {cin >> from >> to;es[min(from,to)].push_back(max(from,to));m[from][to] = 1;m[to][from] = 1;}for(int i = 1 ; i <= N ; i++) {s = 0;v[++s] = i;dfs(i);}cout << ans << endl;}
}