披萨大师

兰桂坊附近有一家成都最好吃的披萨店,店主善于创新,经常推出新的口味。一时间,这家小店声名远扬,吸引无数好吃嘴前来尝鲜,膜拜披萨大师。

披萨大师制作披萨时可能会用到N种原材料,分别标记为1到N。如果任何一种原料都可以和1到N中的所有原料混合,那是最简单不过了。但是,在大师的配料清单上清晰的记录了M组不能混合的原料组合(混合后可能中毒或者超级难吃)。大师想知道:利用已有的原材料最多能制作出多少种披萨?(两张披萨不同是指原料i在一种披萨上,而不在另一种披萨上。)

请你编程帮助披萨大师解决这个问题。

输入

第1行包括两个整数N和M。
接下来M行,每行包括两个不同的数字a和b。表示不能混合的两种原料编号。数据保证a和b不同,有些组合可能出现多次。

输出

仅包含1行,输出N中原料最多能够制作出的披萨种数。

样例输入

3 2
1 2
2 3

样例输出

5

提示
样例1说明:披萨大师可以选择的原料组合是(),(1),(2),(3),(1,3)。注意:不使用原料也可以制作一种披萨。
对于100%的数据1 <= N <= 20,1 <= M <= 400,(1 <= a,b <= N)




#include <bits/stdc++.h>
using namespace std;
int m,n,ans,x[25];
bool v[26][26];
bool check(int k,int p)
{
	for(int i=1;i<=k;i++)
	{
		if(v[p][x[i]]==1)
		{
			return false;
		}
	}
	return true;
}
void dfs(int k,int last)
{
	ans++;
	for(int i=last+1;i<=n;i++)
	{
		if(check(k,i)==true)
		{
			x[k+1]=i;
			dfs(k+1,i);
		}
	}
}
int main()
{
	cin >> n >> m;
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cin >> a >> b;
		v[a][b]=1;
		v[b][a]=1;
	}
	dfs(0,0);
	cout << ans;
	return 0;
}
posted @ 2023-03-07 20:55  Momo·Trace  阅读(124)  评论(0编辑  收藏  举报