分考场


分考场

问题描述:

n个人参加某项特殊考试。

为了公平,要求任何两个认识的人不能分在同一个考场。

求是少需要分几个考场才能满足条件。

输入格式:

第一行,一个整数n(1

第二行,一个整数m,表示接下来有m行数据

以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。

输出格式:

一行一个整数,表示最少分几个考场。

样例输入:

5
8
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5

样例输出:

4

样例输入:

5
10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

样例输出:

5

思路:

深度优先搜索,途中加上简单剪枝。

/**********************************************************
* @Author: 			   .Sunbeam
* @Date:   			   2020-03-20 12:55:42
* @Last Modified by:   .Sunbeam
* @Last Modified time: 2020-03-20 13:10:58
* @Remark: 
**********************************************************/
#include 
#define lowbit(x) (x&(-x))
#define CSE(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define Abs(x) (x>=0?x:(-x))
#define FAST ios::sync_with_stdio(false);cin.tie(0);
using namespace std;

typedef long long ll;
typedef pair pii;
typedef pair pll;

const int maxn=111;
int fid[maxn][maxn],room[maxn][maxn];
int n,m,ar[maxn],ans=INF;

void dfs(int ad,int num){
	if(ad>n){
		ans=min(ans,num);
		return;
	}
	if(num>=ans) return;
	for(int i=0;i>n>>m;
	CSE(fid,0);
	CSE(room,0);
	CSE(ar,0);
	for(int i=0;i>a>>b;
		fid[a][b]=fid[b][a]=1;
	}
	dfs(1,0);
	cout<