[Usaco2009 Nov]lights(高斯消元)

luogu

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

反正我直到现在也不会

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

然后高斯消元

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

然后这些都爆搜

由于剩下的*元不会太多

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

以上

 #include<cstdio>
 #include<algorithm>
 using std::swap;
 ;
 template<typename tp>void read(tp &kk){
     tp ret=,f=;char ch=getchar();
     ;ch=getchar();}
     +ch-';ch=getchar();}
     kk=ret*f;
 }
 int n,a[N][N];

 void gauss()
 {
     ;l<=n;l++)
     {
         int g=l;
         while(g<=n&&(!a[g][l])) g++;
         if(g>n) continue;
         if(l!=g)
             ;i++) swap(a[l][i],a[g][i]);
         ;i<=n;i++)
         {
             if(a[i][l]&&i!=l)
             {
                 ;j++) a[i][j]^=a[l][j];
             }
         }
     }
 }

 int ans;
 void wtf(int l,int x)
 {
     if(x>ans) return;
     if(!l){ans=x;return;}
     ,x+a[l][n+]);
     else
     {
         ]) return;
         wtf(l-,x);
         ;i;i--) a[i][n+]^=a[i][l];
         wtf(l-,x+);
         ;i;i--) a[i][n+]^=a[i][l];
     }
 }
 int m,xi,yi;
 int main()
 {
     read(n),read(m);
     ;i<=n;i++) a[i][i]=a[i][n+]=;
     ;i<=m;i++)
     {
         read(xi),read(yi);
         a[xi][yi]^=,a[yi][xi]^=;
     }
     gauss();
     ans=n;
     wtf(n,);
     printf("%d\n",ans);
     ;
 }

orz

上一篇:SSO单点登录的实现原理是怎样的


下一篇:C#虚方法virtual详解