比赛 20110412pm 评测结果 AWWWWWWWWAWWWWWAA
题目名称 牛棚的灯 最终得分 23
用户昵称 magic 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-04-12 16:26:42
显示代码纯文本
#include<iostream>
#include<cstdio>
#define light_max 36
struct light
{
	bool flag;
	int connect[light_max];
	int pos;
	int times;
};
light data[light_max];
int n,m,maxer;
int ans=10000000;
using namespace std;
void dfs(int p);
void change(int q);
void change2(int q);
void make(int i);
void make(int i)
{
	if (data[i].flag==0) data[i].flag=1;else data[i].flag=0;
}
bool success();
void change(int q)
{
	int j;
	make(q);
	data[q].times++;
	for (j=1;j<=data[q].pos;j++)
	{
	     make(data[q].connect[j]);
		 data[data[q].connect[j]].times++;
	}
}
void change2(int q)
{
	int j;
	make(q);
	data[q].times--;
	for (j=1;j<=data[q].pos;j++)
	{
	     make(data[q].connect[j]);
		 data[data[q].connect[j]].times--;
	}
}
bool success()
{
	int w;
	for (w=1;w<=n;w++)
	{
		if (data[w].flag==false) 
		{
			return (0);
		}
	}
	return (1);
}
void dfs(int p)
{
	int i;	   
	     if ((!data[p].flag)&&(data[p].times<1))
			{
				change(p);
				maxer++;
				if (success())
				{
					if (ans>maxer)
					ans=maxer;
				}
				
				for (i=1;i<=n;i++)
				{					
					dfs(i);
				}
				change2(i);
				maxer--;
	        //printf("%d%s",maxer," ");
	       }
	
	
}
int main()
{
	int k,a,b;
	freopen("lights.in","r",stdin);
	freopen("lights.out","w",stdout);
	scanf("%d%d",&n,&m);
	memset(data,0,sizeof(data));
	for (k=1;k<=m;k++)
	{
		scanf("%d%d",&a,&b);
		data[a].pos++;
		data[a].connect[data[a].pos]=b;
		data[b].pos++;
		data[b].connect[data[b].pos]=a;
		
	}
	for (k=1;k<=n;k++)
	{
		dfs(k);
	}
	printf("%d",ans);
 return 0;	
}