范围这么小一看就是暴力。
直接爆的话会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;
}
}