洛谷 P2962 [USACO09NOV]灯Lights

P2962 [USACO09NOV]灯Lights

题目描述

Bessie and the cows were playing games in the barn, but the power was reset and the lights were all turned off. Help the cows get all the lights back on so they can resume their games.

The N (1 <= N <= 35) lights conveniently numbered 1..N and their switches are arranged in a complex network with M (1 <= M <= 595) clever connection between pairs of lights (see below).

Each light has a switch that, when toggled, causes that light -- and all of the lights that are connected to it -- to change their states (from on to off, or off to on).

Find the minimum number of switches that need to be toggled in order to turn all the lights back on.

It‘s guaranteed that there is at least one way to toggle the switches so all lights are back on.

贝希和她的闺密们在她们的牛棚中玩游戏。但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了。贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望。她希望您能够帮帮她,把所有的灯都给重新开起来!她才能继续快乐地跟她的闺密们继续玩游戏! 牛棚中一共有N(1 <= N <= 35)盏灯,编号为1到N。这些灯被置于一个非常複杂的网络之中。有M(1 <= M <= 595)条很神奇的无向边,每条边连接两盏灯。 每盏灯上面都带有一个开关。当按下某一盏灯的开关的时候,这盏灯本身,还有所有有边连向这盏灯的灯的状态都会被改变。状态改变指的是:当一盏灯是开著的时候,这盏灯被关掉;当一盏灯是关著的时候,这盏灯被打开。 问最少要按下多少个开关,才能把所有的灯都给重新打开。 数据保证至少有一种按开关的方案,使得所有的灯都被重新打开。

输入输出格式

输入格式:

  • Line 1: Two space-separated integers: N and M.
  • Lines 2..M+1: Each line contains two space-separated integers representing two lights that are connected. No pair will be repeated.

输出格式:

  • Line 1: A single integer representing the minimum number of switches that need to be flipped in order to turn on all the lights.

输入输出样例

输入样例#1:

5 6
1 2
1 3
4 2
3 4
2 5
5 3

输出样例#1:

3

说明

There are 5 lights. Lights 1, 4, and 5 are each connected to both lights 2 and 3.

Toggle the switches on lights 1, 4, and 5.

思路:meet in the middle

蒟蒻实在不会HZWER大神

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<long long,int>mp;
int n,m;
int mid,flag,minn=0x7f7f7f7f;
long long ed,qwq[40],mmp[40];
void dfs(int x,long long now,int step){
    if(x==mid+1){
        if(now==ed)
            minn=min(step,minn);
        if(!flag){
            int tmp=mp[now];
            if(!tmp||tmp>step)
                mp[now]=step;
        }
        else{
            int tmp=mp[ed-now];
            if(!tmp)    return ;
            minn=min(tmp+step,minn);
        }
        return ;
    }
    dfs(x+1,now,step);
    dfs(x+1,now^qwq[x],step+1);
}
int main(){
    mmp[1]=1;
    for(int i=2;i<=40;i++)
        mmp[i]=mmp[i-1]<<1;
    scanf("%d%d",&n,&m);
    ed=mmp[n+1]-1;
    for(int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        qwq[x]+=mmp[y];
        qwq[y]+=mmp[x];
    }
    for(int i=1;i<=n;i++)
        qwq[i]+=mmp[i];
    mid=n/2;
    dfs(1,0,0);
    flag=1;
    mid=n;
    dfs(n/2+1,0,0);
    cout<<minn;
}
时间: 2024-10-22 03:02:41

洛谷 P2962 [USACO09NOV]灯Lights的相关文章

P2962 [USACO09NOV]灯Lights

P2962 [USACO09NOV]灯Lights 看完题面,我马上趁教练不注意 打开了某399小游戏.熟练地找到了这个游戏.颓废了一上午 就想到怎么做了. 233 对于一个灯和所以与他相连的等灯.每个灯只有按和不按两种情况.为什么呢? 如果同一盏灯按了两次.就跟没按时一样的.三次亦是如此.由此可得,按奇数次的效果等于按了一次,按偶数次等于没按. 确定了这个关系,我们就可以使用位运算,异或进行列方程了. 啥?方程?等等,smg? 我们要求的是每个灯是否被按. 这就是我们的未知数. 我们设计一下系

P2962 [USACO09NOV]灯Lights 对抗搜索

\(\color{#0066ff}{题目描述}\) 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她,把所有的灯都给重新开起来!她才能继续快乐地跟她的闺密们继续玩游戏! 牛棚中一共有N(1 <= N <= 35)盏灯,编号为1到N.这些灯被置于一个非常複杂的网络之中.有M(1 <= M <= 595)条很神奇的无向边,每条边连接两盏灯.

洛谷 P1876 开灯

传送门 这道题凭什么是! 就因为它代码短?! 还是我太菜了... 第$i$盏灯的开关与否只由其约数个数决定,又有约数公式: 当$n=p_1^{a_1}p_2^{a_2}...p_n^{a_n}$时,约数个数$=(a_1+1)(a_2+1)...(a_n+1)$要使灯亮着,则$(a_1+1)(a_2+1)...(a_n+1)$是奇数.于是$a_1, a_2, a_3, ... a_n$都是偶数.所以$n=m^2, m=p_1^{a_1/2}p_2^{a_2/2}...p_n^{a_n/2}$于是所

洛谷 P2965 [USACO09NOV]农活比赛The Grand Farm-off

P2965 [USACO09NOV]农活比赛The Grand Farm-off 题目描述 Farmer John owns 3*N (1 <= N <= 500,000) cows surprisingly numbered 0..3*N-1, each of which has some associated integer weight W_i (1 <= W_i <= d). He is entering the Grand Farm-off, a farming comp

luogu2962 [USACO09NOV]灯Lights

题目链接:luogu2962 这个题还可以折半搜索(似乎复杂度更有保证),不过作为练手更适合写异或方程组的高斯消元 异或方程组的高斯消元一般是如下形式 \[ (a_{i,1}*x_1)\text^(a_{i,2}*x_2)\text^\cdots\text^(a_{i,n}*x_n)=y_n \] \(\text^\)表示异或运算符,所有的数均\(\in[0,1]\) 注意到异或操作类似于加减操作,直接对两个式子进行异或操作的话可以约去一些项 于是可以类似于高斯消元的方式对该方程进行求解 在这题

洛谷P1161 开灯 数学

其实这道题就是让你求这些数字中 出现了奇数次数的唯一的那个数 然后我们发现出现偶数次的话 因为 x^x=0 0^x=x 所以将这些数 异或起来最后剩下的那个数就是答案了 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <cstdlib> 5 #include <string> 6 #include <algorithm> 7 #include

洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game

题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=

洛谷P1220 关路灯

洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.    为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电.他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯.开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3