折半搜索+洛谷 P2962 [USACO09NOV]Lights G

题意:

有 n盏灯,每盏灯与若干盏灯相连,每盏灯上都有一个开关,如果按下一盏灯上的开关,这盏灯以及与之相连的所有灯的开关状态都会改变。一开始所有灯都是关着的,你需要将所有灯打开,求最小的按开关次数。(1<=n<=35)。

题目:

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.

Input format

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.

Output format

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

Explanation

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.

输入

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

输出

3

分析:

1.如果这道题暴力 DFS 找开关灯的状态,时间复杂度就是O(2n)O(2^{n})O(2n) , 显然超时。不过,如果我们用 meet in middle 的话,时间复杂度可以优化至O(n2n2)O(n2^{\frac{n}{2}})O(n22n)
2.meet in middle 就是让我们先找一半的状态,也就是找出只使用编号为 1到 mid的开关能够到达的状态,再找出只使用另一半开关能到达的状态。
3.如果前半段和后半段开启的灯互补,将这两段合并起来就得到了一种将所有灯打开的方案。
4.具体实现时,可以把前半段的状态以及达到每种状态的最少按开关次数存储在 map 里面,搜索后半段时,每搜出一种方案,就把它与互补的第一段方案合并来更新答案。

AC代码:

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <map>using namespace std;typedef long long ll;int n, m, ans = 0x7fffffff;
map<ll, int> f;
ll a[40];
int main()
{cin >> n >> m;for (int i = 0; i < n; ++i)a[i] = (1ll << i);for (int i = 1; i <= m; ++i){int u, v;cin >> u >> v;--u;--v;a[u] |= (1ll << v);a[v] |= (1ll << u);}for (int i = 0; i < (1 << (n / 2)); ++i){ll t = 0;int cnt = 0;for (int j = 0; j < n / 2; ++j){if ((i >> j) & 1){t ^= a[j];++cnt;}}if (!f.count(t))f[t] = cnt;elsef[t] = min(f[t], cnt);}for (int i = 0; i < (1 << (n - n / 2)); ++i){ll t = 0;int cnt = 0;for (int j = 0; j < (n - n / 2); ++j){if ((i >> j) & 1){t ^= a[n / 2 + j];++cnt;}}if (f.count(((1ll << n) - 1) ^ t))ans = min(ans, cnt + f[((1ll << n) - 1) ^ t]);}cout << ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将数据从 SQL Server 导入 Azure Storage Table

点击上方蓝字关注“汪宇杰博客”导语最近有个需求要将数据存储从 SQL Server 数据库切换到 Azure Storage 中的 Table。然而不管是 SSMS 还是 Azure Portal 都没有提供直接的导入功能&#xff0c;是不是又想自己写程序去导数据了&#xff1f;其实不用&#xff01;没有点过数据库…

[JavaWeb-HTTP]HTTP概念

HTTP&#xff1a; * 概念&#xff1a;Hyper Text Transfer Protocol 超文本传输协议* 传输协议&#xff1a;定义了&#xff0c;客户端和服务器端通信时&#xff0c;发送数据的格式* 特点&#xff1a;1. 基于TCP/IP的高级协议2. 默认端口号:803. 基于请求/响应模型的:一次请求对…

Good Number Gym - 102769G 2020年CCPC秦皇岛分站赛

题意&#xff1a; 如果一个数字是Good Number&#xff0c;当且仅当 ⌊xk⌋\left \lfloor\sqrt[k]{x}\right \rfloor⌊kx​⌋(向下取整) 能整除 x 。 现在给出 n,k &#xff0c;求 1 到 n 之中Good Number 的个数。 题目&#xff1a; Alex loves numbers. Alex thinks that…

【完整目录】每天5分钟用C#学习数据结构

【基础知识】| 作者 / Edison Zhou这是恰童鞋骚年的第250篇原创内容不知不觉&#xff0c;每天5分钟学习数据结构就更新完了&#xff0c;本篇将该系列所有文章整理起来作为一个目录&#xff0c;方便你的快速阅读。1线性表线性表是最简单也是在编程当中使用最多的一种数据结构。例…

.NET 5 开发WPF - 美食应用登录UI设计

点击上方“Dotnet9”添加关注哦Demo演示&#xff1a;演示动画你的时间宝贵&#xff0c;不想看啰嗦的文字&#xff0c;可直接拉到文末下载源码&#xff01;1. 新建项目站长开发环境&#xff1a;VS 2019企业版 16.70.NET 5 Preview 5.NET 5 WPF 项目模板和 .NET Core 3.1 WPF 项目…

[JavaWeb-HTTP]HTTP_请求消息_请求头请求体

请求消息数据格式 1. 请求行请求方式 请求url 请求协议/版本GET /login.html HTTP/1.1* 请求方式&#xff1a;* HTTP协议有7中请求方式&#xff0c;常用的有2种* GET&#xff1a;1. 请求参数在请求行中&#xff0c;在url后。2. 请求的url长度有限制的3. 不太安全* POST&#xf…

字典树模板+洛谷P2580 于是他错误的点名开始了

题目&#xff1a; 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人。 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次&#xff0c;然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉&#xff08;详情请见已结束比赛 CON900&#xff09;。 题目描述 这之…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

[JavaWeb-Servlet]概述与快速入门

Servlet&#xff1a; server applet * 概念&#xff1a;运行在服务器端的小程序* Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问到(tomcat识别)的规则。* 将来我们自定义一个类&#xff0c;实现Servlet接口&#xff0c;复写方法。* 快速入门&#xff1a;1. 创建Ja…

01tire+洛谷P4551 最长异或路径

题目&#xff1a; 给定一棵n个点的带权树&#xff0c;结点下标从1开始到N。寻找树中找两个结点&#xff0c;求最长的异或路径。 异或路径指的是指两个结点之间唯一路径上的所有边权的异或。 输入格式 第一行一个整数NN&#xff0c;表示点数。 接下来 n−1 行&#xff0c;给…

C#9.0 终于来了,带你一起解读 nint 和 Pattern matching 两大新特性玩法

一&#xff1a;背景1. 讲故事上一篇C#9.0 终于来了&#xff0c;您还学的动吗&#xff1f; 带上VS一起解读吧&#xff01;跟大家聊到了Target-typed new 和 Lambda discard parameters&#xff0c;看博客园和公号里的阅读量都达到了新高&#xff0c;甚是欣慰&#xff0c;不管大家…

[JavaWeb-Tomcat]web服务器软件_Tomcat介绍

Tomcat&#xff1a;web服务器软件 1. 下载&#xff1a;http://tomcat.apache.org/2. 安装&#xff1a;解压压缩包即可。* 注意&#xff1a;安装目录建议不要有中文和空格3. 卸载&#xff1a;删除目录就行了4. 启动&#xff1a;* bin/startup.bat ,双击运行该文件即可* 访问&…

软件设计模式期末大作业——可乐商城管理系统

文章目录设计模式大作业软 件 设 计 模 式 任 务 书设计要求&#xff1a;学生应完成的工作&#xff1a;1. 应用场景描述2. 设计模式选择3. 实现语言与工具参考文献阅读&#xff1a;工作计划&#xff1a;一、系统目标1. 设计目的2. 需求描述二、 系统模式选择1.需求分析2.选用设…

深度解读Microsoft Build 2020:提升开发效率,优化开发环境

Microsoft Build 2020在众多新产品与技术发布中圆满落幕但身为开发技术人深知技术世界的更迭、求索却从未止步唯有不断提升自身技能栈创新方能从技术浮沉中获得更多养分让技术予力世界更有温度Microsoft Build 2020大会后&#xff0c; Visual Studio Family 和 .NET 成为众多开…

[JavaWeb]web相关概念回顾

web相关概念回顾 1. 软件架构1. C/S&#xff1a;客户端/服务器端2. B/S&#xff1a;浏览器/服务器端2. 资源分类1. 静态资源&#xff1a;所有用户访问后&#xff0c;得到的结果都是一样的&#xff0c;称为静态资源.静态资源可以直接被浏览器解析* 如&#xff1a; html,css,Jav…

Github 数据洞察之复杂信息网络

摘要&#xff1a;开源协作是数字化时代的必备技能&#xff0c;而背后的开发行为分析&#xff0c;能够让你看到一幅开源世界的全景图&#xff1b;2020年2月&#xff0c;X-lab 开放实验室联合InfoQ发布了《GitHub 2019 数字年报》&#xff0c;收到了业界的一致好评。数据科学与工…

Java解决x的平方根问题

Java解决x的平方根问题 01 题目 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 **注意&#xff1a;**不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.…

[JavaWeb-Servlet]Servlet相关配置

Servlet相关配置 1. urlpartten:Servlet访问路径1. 一个Servlet可以定义多个访问路径 &#xff1a; WebServlet({"/d4","/dd4","/ddd4"})2. 路径定义规则&#xff1a;1. /xxx&#xff1a;路径匹配2. /xxx/xxx:多层路径&#xff0c;目录结构3. *.…

number one

alibab 第一天&#xff1a; 领了个联想电脑&#xff0c;之前还一直担心会不适应MAC&#xff0c;我想多了&#xff0c;不过转正之后还是会换成MAC。。。 下载安装包&#xff1a; idea&#xff1a;开始以为要专业版&#xff0c;结果用社区版的就行&#xff0c;在阿里郎上直接获…

2020年,.NET Core起飞在即,最强日志分析ELK还不会?

近期.NET社区迎来一系列利好&#xff1a;1 Build2020&#xff0c;微软发布多款产品赋能.NET开发者&#xff0c;比以往任何时候都更贴近开发者&#xff1b;2 TechEmpower第19轮编程语言框架性能排行榜&#xff0c;Asp.Net Core成为主流Web框架第一&#xff1b;3 Stackoverflow 2…