灯 & 树
这回是两道题一起...
[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)查询一个结点的亮度. 数据规模:\ ...
随机推荐
- StoryLine3变量存储与跳转后台时的使用
前言 公司项目原因,接触到storyline3(后面简称SL)课件制作工具,类似ppt,但是又多了互动.交互,且页面元素可添加触发器,触发器中可执行js代码. 1.官方教程 在SL中,会有“了解详情. ...
- Spring AOP不起作用原因
一.直接在切面类定义切点: AOP切面类里面的方法全部不支持触发切面,否则一个切面函数把自己当做切点就会导致递归层层调用. AOP切面类发出函数调用一律不触发切面,避免两个切面类相互调用迭代请求的情况 ...
- PHP从入门到精通(二)
PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...
- Individual Project 1 总结
题目: http://www.cnblogs.com/jiel/p/3978727.html 1. 估计时间: ① 遍历目录找到所有文本文件 3天 ② 编写统计词频的函数 排序的函数 并输出到文件 2 ...
- 第十次Scrum meeting
第十次Scrum meeting 任务及完成度: 成员 1.2 1.3 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(100%) 任务1114-2:完成对pdf.pp ...
- Linux内核分析 读书笔记 (第三章)
第三章 进程管理 3.1 进程 1.进程: 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程:执行 ...
- Cocos2d-x项目创建方式
刚接触cocos2d-x的时候,还只有2.x版本,尝试着将cocos2d-x项目创建功能加入到vs里面去,后来,引擎用Python封装好了好多个脚本文件,其中就包括create_project.py文 ...
- 《面向对象程序设计》第三次作业 Calculator
c++第三次作业 Calculator git上的作业展示点这里. ps:有一点不是很明确,作业要求:将数字和符号提取出来,得到一组string,然后才将这些string存入队列中.按我的理解是需要将 ...
- sublime text3修改默认配置文件是失败的解决方法
如果你修改sublime text3的默认配置文件Preferences.sublime-settings失败,现实的错误信息如下图: 其实根据提示信息就好找问题出在哪里了:权限 要想成功的修改默认配 ...
- Windows下 使用命令行的方式 设置主机的ip地址. 以及设置多ip地址的方法
1. 首先要查看一下网卡的设备名称 netsh interface ip show interfaces 结果为: 记住当前的网卡名称 进行后续操作. 其实 也可以通过 ipconfig /all 的 ...