BZOJ 2466 中山市选2009 树 高斯消元+暴力
题目大意:树上拉灯游戏
高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算
这做法真是一点也不优雅。。。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 110
using namespace std;
int n,m;
int f[M][M],is_free[M],tot;
int ans[M],cnt;
void Gauss_Elimination()
{
int i,j,k,l;
//第i个方程 第j个变量
for(i=1,j=1;i<=n;i++,j++)
{
if(j==n+1)
{
for(j=i;j<=n;j++)
if(f[j][n+1]==1)
{
puts("-1");
exit(0);
}
m=i-1;
return ;
}
for(k=i;k<=n;k++)
if(f[k][j])
break;
if(k==n+1)
{
is_free[j]=++tot;
i--;
continue;
}
for(l=j;l<=n+1;l++)
swap(f[i][l],f[k][l]);
for(k=i+1;k<=n;k++)
if(f[k][j])
for(l=j;l<=n+1;l++)
f[k][l]^=f[i][l];
}
m=n;
}
void Get_Ans()
{
int i,j,k;
for(j=n+1,i=m;i;i--)
{
for(j--;j&&is_free[j];j--);
ans[j]=f[i][n+1];
for(k=j+1;k<=n;k++)
if(f[i][k])
ans[j]^=ans[k];
}
}
void Initialize()
{
memset(f,0,sizeof f);
memset(is_free,0,sizeof is_free);
ans[0]=0x3f3f3f3f;
tot=0;
}
int main()
{
int i,j,x,y;
while(cin>>n,n)
{
Initialize();
for(i=1;i<=n;i++)
f[i][i]=1,f[i][n+1]=1;
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
f[x][y]=f[y][x]=1;
}
Gauss_Elimination();
for(i=0;i<1<<tot;i++)
{
for(j=1;j<=n;j++)
if(is_free[j])
ans[j]=(i>>is_free[j]-1)&1;
Get_Ans();
cnt=0;
for(j=1;j<=n;j++)
if(ans[j])
cnt++;
ans[0]=min(ans[0],cnt);
}
cout<<ans[0]<<endl;
}
return 0;
}
BZOJ 2466 中山市选2009 树 高斯消元+暴力的更多相关文章
- BZOJ 2466: [中山市选2009]树( 高斯消元 )
高斯消元解异或方程组...然后对自由元进行暴搜.树形dp应该也是可以的... ------------------------------------------------------------- ...
- 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组
[题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...
- BZOJ 2466 [中山市选2009]树(高斯消元)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2466 [题目大意] 给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了, ...
- BZOJ 2466: [中山市选2009]树
Sol 树形DP. 听说有非常神奇的高斯消元的做法...orz... 然而我只会 \(O(n)\) 的树形DP. 首先一个点的状态只于他的父节点和子树有关,跟他 子树的子树 和 父亲的父亲 都没有任何 ...
- bzoj2466: [中山市选2009]树
同上一题.(应该可以树形dp,然而我不会... #include<cstdio> #include<cstring> #include<iostream> #inc ...
- 【BZOJ2466】[中山市选2009]树 树形DP
[BZOJ2466][中山市选2009]树 Description 图论中的树为一个无环的无向图.给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按 ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- 【bzoj4184】shallot 线段树+高斯消元动态维护线性基
题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...
- 【dfs】【高斯消元】【异或方程组】bzoj1770 [Usaco2009 Nov]lights 燈 / bzoj2466 [中山市选2009]树
经典的开关灯问题. 高斯消元后矩阵对角线B[i][i]若是0,则第i个未知数是自由元(S个),它们可以任意取值,而让非自由元顺应它们,得到2S组解. 枚举自由元取0/1,最终得到最优解. 不知为何正着 ...
随机推荐
- Cognos业务洞察力:My First Business Insight
Cognos Dashboard Cognos Dashboard 可以展示具有重要影响力的信息,以监视.衡量和管理企业绩效. IBM Cognos Dashboard(仪表盘)使任何用户能够以支持其 ...
- Inception in CNN
之前也写过GoogLeNet的笔记.但那个时候对Inception有些似懂非懂,这周又一次看了一遍,觉得有了新的体会,特地又一次写一篇博客与它再续前缘. 本文属于论文笔记性质.特此声明. Networ ...
- AsyncTask 和 Thread 区别
一.AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法 ...
- VMware12 中安装MS-DOS 7.10
按一下步骤进行安装: 选择虚拟机,然后如下图选择“ 编辑虚拟机设置 ”. 弹出的编辑框中,选择“CD/DVD”中的“使用ISO镜像文件”,然后选择“浏览”,打开MS-DOS7.10.iso的ISO镜像 ...
- php之快速入门学习-8(if-else)
PHP If...Else 语句 条件语句用于根据不同条件执行不同动作. PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作.您可以在代码中使用条件语句来完成此任务. 在 PHP ...
- tomcat thread dump 分析
前言 Java Thread Dump 是一个非常有用的应用诊断工具, 通过thread dump出来的信息, 可以定位到你需要了解的线程, 以及这个线程的调用栈. 如果配合linux的top命令, ...
- Linux的网卡由eth0变成了eth1怎么办?
Linux的网卡由eth0变成了eth1怎么办? Linux的网卡由eth0变成了eth1,如何修复 使用wmware安装了linux,安装成功后,使用的网卡是eth0,没有eth1.但是用过一段时间 ...
- TP框架中的A方法和R方法
ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...
- MySQL的各种SHOW
. SHOW语法 13.5.4.1. SHOW CHARACTER SET语法 13.5.4.2. SHOW COLLATION语法 13.5.4.3. SHOW COLUMNS语法 13.5.4.4 ...
- Android 如何将Canvas上绘制的内容保存成本地图片(转)
效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --> <uses- ...