首页 > 其他 > 详细

P2962 [USACO09NOV]灯Lights

时间:2019-08-27 14:10:39      阅读:59      评论:0      收藏:0      [点我收藏+]

P2962 [USACO09NOV]灯Lights

guass消元异或方程组

#include<bits/stdc++.h>
using namespace std;
#define maxn 100
#define sc(x) scanf("%lld",&x);
#define int long long
int A[maxn][maxn];
int x[maxn];
int ans=1000;
int n,m;
void guass()
{
    for(int i=1; i<=n; i++)
    {
        int t=i;
        if(!A[t][t])
        {
            for(int j=i+1; j<=n; j++)
            {
                if(A[j][i])
                {
                    t=j;
                    break;
                }
            }
            swap(A[i],A[t]);
        }
        for(int k=i+1; k<=n; k++)
        {
            if(A[k][i])
            {
                for(int j=1; j<=n+1; j++)
                {
                    A[k][j]^=A[i][j];///消元
                }
            }
        }

    }
}

void dfs(int i,int t)
{
    if(t>ans)return;
    if(i==0){
        ans=min(t,ans);
        return;
    }
    if(A[i][i]){
        x[i]=A[i][n+1];
        for(int j=i+1;j<=n;j++)
        if(A[i][j]){x[i]^=x[j];}
        if(x[i])dfs(i-1,t+1);
        else dfs(i-1,t);
    }else{
      x[i]=0;
      dfs(i-1,t);
      x[i]=1;
      dfs(i-1,t+1);

    }

}
signed main()
{
    sc(n);sc(m);
    int x,y;
    while(m--){
        sc(x);sc(y);
        A[x][y]=A[y][x]=1;
    }
    for(int i=1;i<=n;i++)A[i][i]=A[i][n+1]=1;
    guass();
    dfs(n,0);
    cout<<ans<<\n;
}

 

P2962 [USACO09NOV]灯Lights

原文:https://www.cnblogs.com/liulex/p/11417938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!