记录编号 |
24653 |
评测结果 |
AWWWWWWWWAWWWWWAA |
题目名称 |
牛棚的灯 |
最终得分 |
23 |
用户昵称 |
magic |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.009 s |
提交时间 |
2011-04-13 10:37:49 |
内存使用 |
0.26 MiB |
显示代码纯文本
#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;
}