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,最终得到最优解. 不知为何正着 ...
随机推荐
- [置顶] hdu 4418 高斯消元解方程求期望
题意: 一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...
- Medication Reconciliation Overview
http://www.hcsinc.net/HCS-Medication-Reconciliation/med-rec-overview.html At HCS, we've worked with ...
- 如何在Linux中发现IP地址冲突
导读 你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们.它们通过DHCP服务器分配并且会经常改变.现在有两种IP地址.动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态 ...
- vs2013 密钥_
vs2013 密钥 最佳答案: BWG7X-J98B3-W34RT-33B3R-JVYW9
- [Javascript Crocks] Make your own functions safer by lifting them into a Maybe context
You probably have functions that aren’t equipped to accept a Maybe as an argument. And in most cases ...
- 修改字段结构之GP工具
即然有这个需求,就有人这样做.有人写了GP工具直接来重命名字段名和字段别名.工具及源码下载链接为:http://www.t00y.com/file/90123888 加载到ToolBox中后,可直接运 ...
- Oracle 删除表中记录 如何释放表及表空间大小
1.查看一个表所占的空间大小:SELECT bytes/1024/1024 ||'MB' TABLE_SIZE ,u.* FROM USER_SEGMENTS U WHERE U.SEGMENT_NA ...
- git检查与放弃本地的代码修改情况
git diff 可以查看当前没有add 的内容修改(不在缓冲区的文件变化) git diff --cached查看已经add但没有commit 的改动(在缓冲区的文件变化) git diff HE ...
- SQLite的升级(转)
做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER ...
- 赵雅智:service_bindService生命周期
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0 ...