灯 & 树
这回是两道题一起...
[USACO09NOV]灯
[中山市选2009]树
题意:给您一些灯,以及一些边。每次改变一盏灯的时候,它相邻的灯也会变。求把灯状态全部转换的最小操作次数。
解:
解异或方程组的经典题。
我们对于灯列一个方程组,如果i对j有影响就令a[j][i] = 1
然后解出上三角矩阵。
解出来a[i][i] = 1的地方就是确定的灯。
0就是可有可无的灯。
然后我们大暴力搜索可有可无的灯。遇到确定的灯就根据已经搜索的那些来确定。
#include <cstdio>
#include <bitset>
#include <algorithm>
const int N = ; int n, p[N], ans = 0x3f3f3f3f;
std::bitset<N> a[N]; inline void Gauss() {
for(int i = ; i < n; i++) {
for(int j = i; j <= n; j++) {
if(a[j][i]) {
std::swap(a[i], a[j]);
break;
}
}
if(!a[i][i]) {
continue;
}
for(int j = i + ; j <= n; j++) {
if(a[j][i]) {
a[j] ^= a[i];
}
}
}
return;
} inline void DFS(int k, int s) {
if(s >= ans) {
return;
}
if(k < ) {
ans = std::min(ans, s);
return;
}
if(a[k][k]) {
int t = a[k][n + ];
for(int i = k + ; i <= n; i++) {
if(a[k][i]) {
t ^= p[i];
}
}
if(t) { /// need press
p[k] = ;
DFS(k - , s + );
p[k] = ;
}
else {
DFS(k - , s);
}
}
else {
DFS(k - , s);
p[k] = ;
DFS(k - , s + );
p[k] = ;
}
return;
} int main() {
int m;
scanf("%d%d", &n, &m);
for(int i = , x, y; i <= m; i++) {
scanf("%d%d", &x, &y);
a[y].set(x);
a[x].set(y);
} for(int i = ; i <= n; i++) {
a[i].set(n + );
a[i].set(i);
} Gauss(); DFS(n, ); printf("%d", ans); return ;
}
AC代码
一点思考:
我们能不能把上三角矩阵消成最终的那种结果,然后搜索?这样每次在DFS中确定状态就是O(1)的了。
我们既然都消完了,能不能直接把 ans += a[i][i] & a[i][n + 1] ?
事实证明不行...
随手造了点样例发现过不了...
不禁开始思考a[i][i] = 0的意义来。
比如这个最简单的样例:1和2之间有一条边。
那么消元之后的矩阵是这样的:
1 1 1
0 0 0
这是啥啊.....搞不倒
灯 & 树的更多相关文章
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- 2021广东工业大学新生赛决赛 L-歪脖子树下的灯
题目:L-歪脖子树下的灯_2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛) (nowcoder.com) 比赛的时候没往dp这方面想(因为之前初赛和月赛数学题太多了啊),因此只往组合数学 ...
- 黑马程序员_JAVA之交通灯管理系统
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路 ...
- 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏
[题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...
- BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )
线段树.. --------------------------------------------------------------------------------- #include< ...
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
Stars Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others) Total Subm ...
- java 7K交通灯管理系统面试题
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往 ...
- java--交通灯管理系统
转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944947 .交通灯管理系统的业务和需求分析 交通灯管理系统的项目需求: 模拟实现十字路口的交 ...
- 树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题
题目描述 有一棵树,每个结点有一个灯(初始均是关着的).每个灯能对该位置和相邻结点贡献1的亮度.现有两种操作: (1)将一条链上的灯状态翻转,开变关.关变开: (2)查询一个结点的亮度. 数据规模:\ ...
随机推荐
- ActiveMQ 填坑记
前言 MQ是现在大型系统架构中必不可少的一个重要中间件,之前有偏文章<MQ(消息队列)常见的应用场景解析>介绍过MQ的应用场景,现在流行的几个MQ是rabbitmq,rocketma,ka ...
- 记一次用WPScan辅助渗透WordPress站点
记一次用WPScan辅助渗透WordPress站点 一.什么是WPScan? WPScan 是一个扫描 WordPress 漏洞的黑盒子扫描器,它可以为所有 Web 开发人员扫描 WordPress ...
- ngx_pagespeed-nginx前端优化模块介绍
ngx_pagespeed是Nginx的一个扩展模块,借助pagespeed,为Nginx网站服务器提速.主要的功能是针对前端页面而进行服务器端的优化,对前端设计人员来说,可以省去优化css.js以及 ...
- yum源使用的几个报错小总结 (例如: python2.6.6 下yum不能使用: No module named yum)
服务器上的yum突然不好使用,使用yum时有如下几个保持,解决方案如下: 1)Error: Cannot retrieve repository metadata (repomd.xml) for r ...
- BugPhobia团队篇章:团队管理与Github源代码管理说明
0x00:序言 To the searching tags, you may well fall in love withhttp://xueba.nlsde.buaa.edu.cn/ 再见,无忧时光 ...
- 微信小程序navigator
如果是小程序自身页面的跳转 <navigator open-type="navigate" target="self" url="target ...
- mybatis分页 -----PageHelper插件
对查询结果进行分页 一,使用limit进行分页 1.mybatis 的sql语句: <if test="page !=null and rows !=null"> li ...
- [转帖]Asp.Net MVC EF各版本区别
Asp.Net MVC EF各版本区别 https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 201 ...
- ubuntu安装网易云音乐
1直接安装sudo dpkg -i netease-cloud-music_1.0.0_i386_ubuntu16.04.deb 2修复并自动安装所有依赖包 sudo apt-get install ...
- mysql学习笔记五 —— MHA
MySQL_MHA ABB(主从复制)-->MHA(实现mysql高可用.读写分离.脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepali ...