记录编号 |
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;
- }