时间限制: 1 Sec 内存限制: 128 MB
题目描述
中古时期的战争,是由组织散漫的战斗团,在需要运用策略和调动的战场上互相对峙、冲突,然后再一步一步演进而来。一个国家的交通水平也非常重要,如果把各个城邦看成点,道路看成边,几个城邦之间互有道路相连,那么这些城邦对于整个国家来说,就可以称为一个“完全子图”,完全子图中包含的城邦数量越大,一般说明这个国家的交通水平越高,现在给你一张某国家的地图,你能判断这个国家的交通水平是多少吗?
输入
第一行输入两个整数N, M(N <= 15, M <= 70),分别表示城邦的数量和道路的数量,接下来第2行到第1 + M行,每行两个整数U, V(U <= N, V <= N),表示U与V之间有一条道路。
输出
一个正整数,表示该图的最大完全子图的顶点数。
样例输入
5 8
1 2
1 5
2 5
5 3
1 3
2 3
3 4
2 4
样例输出
4
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int N = 1e5 + 9;
ll n,m;
ll a[100][100];
ll ma=0;
ll cn=0;
ll v[100];
void dfs(int x){
if(x>n){
ma=max(ma,cn);
return ;
}
int flag=1;
for(int i=1;i<x;i++){
if(v[i]==1&&!a[i][x]){
flag=0;
break;
}
}
if(flag){
v[x]=1;
cn++;
dfs(x+1);
cn--;
v[x]=0;
}
dfs(x+1);
return ;
}
int main() {
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
dfs(1);
cout<<ma;
return 0;
}