[Usaco2009 Nov]lights(高斯消元)

luogu

点灯游戏应该很多人都在小时候頽过吧

反正我直到现在也不会

很明显一个灯最多只需要点一次

然后高斯消元

解完肯定剩自由元(就是那些全是0的行)

然后这些都爆搜

由于剩下的自由元不会太多

所以时间复杂度$O(能过)$

以上

 1 #include<cstdio>
 2 #include<algorithm>
 3 using std::swap;
 4 const int N=40;
 5 template<typename tp>void read(tp &kk){
 6     tp ret=0,f=1;char ch=getchar();
 7     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
 8     while(ch>=‘0‘&&ch<=‘9‘){ret=ret*10+ch-‘0‘;ch=getchar();}
 9     kk=ret*f;
10 }
11 int n,a[N][N];
12
13
14 void gauss()
15 {
16     for(int l=1;l<=n;l++)
17     {
18         int g=l;
19         while(g<=n&&(!a[g][l])) g++;
20         if(g>n) continue;
21         if(l!=g)
22             for(int i=l;i<=n+1;i++) swap(a[l][i],a[g][i]);
23         for(int i=1;i<=n;i++)
24         {
25             if(a[i][l]&&i!=l)
26             {
27                 for(int j=l;j<=n+1;j++) a[i][j]^=a[l][j];
28             }
29         }
30     }
31 }
32
33 int ans;
34 void wtf(int l,int x)
35 {
36     if(x>ans) return;
37     if(!l){ans=x;return;}
38     if(a[l][l]) wtf(l-1,x+a[l][n+1]);
39     else
40     {
41         if(a[l][n+1]) return;
42         wtf(l-1,x);
43         for(int i=l-1;i;i--) a[i][n+1]^=a[i][l];
44         wtf(l-1,x+1);
45         for(int i=l-1;i;i--) a[i][n+1]^=a[i][l];
46     }
47 }
48 int m,xi,yi;
49 int main()
50 {
51     read(n),read(m);
52     for(int i=1;i<=n;i++) a[i][i]=a[i][n+1]=1;
53     for(int i=1;i<=m;i++)
54     {
55         read(xi),read(yi);
56         a[xi][yi]^=1,a[yi][xi]^=1;
57     }
58     gauss();
59     ans=n;
60     wtf(n,0);
61     printf("%d\n",ans);
62     return 0;
63 }

orz

原文地址:https://www.cnblogs.com/rikurika/p/light.html

时间: 2024-11-08 04:18:48

[Usaco2009 Nov]lights(高斯消元)的相关文章

BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )

高斯消元解xor方程组...暴搜自由元+最优性剪枝 ----------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> using namespace std; const int maxn = 49; int N, Id[max

BZOJ 1770 [Usaco2009 Nov]lights 燈 【高斯消元】

Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望.她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地跟她的閨密們繼續玩遊戲! 牛棚中一共有N(1 <= N <= 35)盞燈,編號為1到N.這些燈被置於一個非常複雜的網絡之中.有M(1 <= M <= 595)條很神奇的無向邊,每條邊連接兩盞燈. 每盞燈上面都帶有一個開關.當

【高斯消元】BZOJ 1770: [Usaco2009 Nov]lights 燈

Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望.她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地跟她的閨密們繼續玩遊戲! 牛棚中一共有N(1 <= N <= 35)盞燈,編號為1到N.這些燈被置於一個非常複雜的網絡之中.有M(1 <= M <= 595)條很神奇的無向邊,每條邊連接兩盞燈. 每盞燈上面都帶有一個開關.當

POJ 1222 EXTENDED LIGHTS OUT 高斯消元

点击打开链接 EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6492   Accepted: 4267 Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 butt

uva 1560 - Extended Lights Out(枚举 | 高斯消元)

题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5?6的矩阵,每个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,如果按了这个位置的开关,将会导致周围包括自己位置的灯状态变换,求一个按开关位置,保证所有灯都灭掉. 解题思路: 枚举,枚举第一行的状态,然后递推出后面四行的状态. 高斯消元,对于每个位置对定变量,这样列出30个方程求解. C++ 枚举 #include <cstdio> #include <cstring> #include &

UVA 1560 - Extended Lights Out(高斯消元)

UVA 1560 - Extended Lights Out 题目链接 题意:给定一个矩阵,1代表开着灯,0代表关灯,没按一个开关,周围4个位置都会变化,问一个按的方法使得所有灯都变暗 思路:两种做法: 1.枚举递推 这个比较简单,就枚举第一行,然后递推过去,每次如果上一行是亮灯,则下一行开关必须按下去 2.高斯消元, 这个做法比较屌一些,每个位置对应上下左右中5个位置可以列出一个异或表达式,然后30个位置对应30个异或表达式,利用高斯消元法就能求出每个位置的解了 代码: 高斯消元法: #inc

POJ EXTENDED LIGHTS OUT 1222【高斯消元】

Language: Default EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7672   Accepted: 4996 Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 row

【高斯消元】Poj 1222:EXTENDED LIGHTS OUT

Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 buttons each). Each button has a light. When a button is pressed, that button and each of its (up to four) neighbo

POJ 1222 extended lights out 高斯消元 板子题

题目链接:http://poj.org/problem?id=1222 题目描述:其实就是开关问题, 按下按钮会影响当前和周围的四个按钮, 问关闭所有灯的方案 解题思路:以前用搜索做过, 那时候是刚刚接触ACM的时候, 当时劲头真足啊, 这个解释的很好:http://blog.csdn.net/u013508213/article/details/47263183 代码: #include <iostream> #include <cstdio> #include <cstr