HDU

来源:互联网 发布:clowwindy 知乎妹子 编辑:程序博客网 时间:2024/06/05 16:44

范围这么小一看就是暴力。

直接爆的话会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;    }}