这回是两道题一起...

[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

这是啥啊.....搞不倒

灯 & 树的更多相关文章

  1. codevs——1690 开关灯

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description YYX家门前的街上有N( ...

  2. 2021广东工业大学新生赛决赛 L-歪脖子树下的灯

    题目:L-歪脖子树下的灯_2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛) (nowcoder.com) 比赛的时候没往dp这方面想(因为之前初赛和月赛数学题太多了啊),因此只往组合数学 ...

  3. 黑马程序员_JAVA之交通灯管理系统

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  1.异步随机生成按照各个路 ...

  4. 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏

    [题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...

  5. BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

    线段树.. --------------------------------------------------------------------------------- #include< ...

  6. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  7. java 7K交通灯管理系统面试题

    交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆.    比如:    由南向而来去往北向的车辆----直行车辆    由西向而来去往 ...

  8. java--交通灯管理系统

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944947 .交通灯管理系统的业务和需求分析 交通灯管理系统的项目需求: 模拟实现十字路口的交 ...

  9. 树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题

    题目描述 有一棵树,每个结点有一个灯(初始均是关着的).每个灯能对该位置和相邻结点贡献1的亮度.现有两种操作: (1)将一条链上的灯状态翻转,开变关.关变开: (2)查询一个结点的亮度. 数据规模:\ ...

随机推荐

  1. Shell编程基础篇-上

    1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...

  2. mysql 多主

    原理:多个msyql/mariadb之间可以实时同步,任意节点的操作可以立即同步到其他节点,底层采用galera插件同步,类似rsync,上层mysql相对于galera是透明的,可以实现多节点同时读 ...

  3. Kafka(分布式发布-订阅消息系统)工作流程说明

    Kafka系统架构Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和 ...

  4. “耐撕团队”部署并测试onezero团队记帐本项目

    耐撕团队 对onezero团队记帐本项目的部署并测试 测试指标参见下面给出的博客: http://www.ltesting.net/ceshi/ceshijishu/xncs/2014/1030/20 ...

  5. spring boot之mybatis配置

    配置在application.yml文件中 mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Map ...

  6. 《Linux课本》读书笔记 第十七章 模块

    设备与模块: 设备类型:块设备(blkdev).字符设备(cdev).网络设备: 模块: 分析hello,world模块代码.Hello_init是模块的入口点,通过module_init()注册到系 ...

  7. Python学习笔记 --第二章

    Python语法基础 "#"号为注释符,建议缩进四个空格,Python大小写敏感. 数据类型 整数 0,2等等,以0x开头的为十六进制数 浮点数 1.58e9 字符串 用'或"括起来的任意文 ...

  8. github第一次作业链接

    https://github.com/xuhuzi/test/blob/master/test1 https://github.com/xuhuzi/test/blob/master/test2 ht ...

  9. asp.net webform设计思路的思考

    我使用asp.net的webform框架进行web应用程序的开发已经差不多四年了,在整个开发生涯中,也使用过一年asp.net的mvc框架.因为网上经常有讨论webform框架和mvc框架的优劣,所以 ...

  10. Distances to Zero CodeForces - 803B (二分)

    题目链接:https://vjudge.net/problem/CodeForces-803B#author=0 题意: 给你一个数组,其中至少包括一个0,求每一个元素距离最近一个0的距离是多少. 样 ...