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,最终得到最优解. 不知为何正着 ...
随机推荐
- 解析XML并将信息封装到对象中
[person.xml]要解析的内容 <?xml version="1.0" encoding="UTF-8"?> <students> ...
- eclipse 使用Maven deploy命令部署构建到Nexus上 【二】
http://blog.csdn.net/jun55xiu/article/details/43051627
- Linux系统多网卡绑定实战
导读 对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡.在生产型的系统中,网卡的可靠性就更为重要了. 多块网卡绑定到一个IP地址,当一块网卡发生物理性损坏的情况下,另一块网卡自动启用,并提供正 ...
- sed 常用的命令
n: 读取一行,执行n,把当前行打印到标准输出,再读取一行,覆盖当前行,然后对模式空间执行一组模式/行为.N:读取一行,执行N,再读取一行,现在模式空间有两行内容,执行一组模式/行为.如下:[root ...
- GraphQL返回分页对象
private GraphQLOutputType testUserOutputType; private GraphQLOutputType pageType; private void initO ...
- Effective C++ 38-42
38.绝不要又一次定义继承而来的缺省參数值. 又一次定义函数缺省參数值意味着又一次定义函数.而非虚函数不能又一次定义,所以将就考虑不能又一次定义虚函数的缺省參数值的原因:虚函数是动态绑定的而缺省參数值 ...
- iOS多线程与网络开发之多线程NSThread
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
Linux rpm方式安装完MySQL之后 mysql>SET PASSWORD = PASSWORD('newpasswd');
- java 将Map拷贝到另一个Map对象当中
java 将Map拷贝到另一个Map对象当中 CreateTime--2018年6月4日09点46分 Author:Marydon 1.需求说明 将一个MapA对象中所有的键值对完全拷贝到另一个M ...
- 28种CSS3炫酷载入动画特效
这是一组效果很炫酷的纯CSS3 Loading载入动画特效.这组loading动画共同拥有27种不同的效果.每一种loading动画都是通过CSS3的keyframes帧动画来完毕的,每个载入动画都构 ...