高斯消元解异或方程组...然后对自由元进行暴搜。树形dp应该也是可以的...

--------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
 
using namespace std;
 
const int maxn = 109;
 
bitset<maxn> mat[maxn];
int N, State[maxn], Id[maxn], ans;
 
void Init() {
for(int i = 0; i < N; i++) {
mat[i].reset();
mat[i][i] = mat[i][N] = 1;
}
for(int i = 1; i < N; i++) {
int u, v;
scanf("%d%d", &u, &v); u--; v--;
mat[u][v] = mat[v][u] = 1;
}
ans = maxn;
memset(Id, -1, sizeof Id);
}
 
void Work() {
int k = 0;
for(int i = 0; i < N; i++) {
for(int j = k; j < N; j++) if(mat[j][i]) {
if(j != k)
swap(mat[j], mat[k]);
break;
}
if(mat[k][i]) {
for(int j = k; ++j < N; ) if(mat[j][i])
mat[j] ^= mat[k];
Id[i] = k++;
}
}
}
 
void Dfs(int x, int sum) {
if(sum >= ans)
return;
if(x < 0) {
ans = sum; return;
}
if(~Id[x]) {
State[x] = mat[Id[x]][N];
for(int i = x; ++i < N; )
if(mat[Id[x]][i]) State[x] ^= State[i];
Dfs(x - 1, sum + State[x]);
} else {
State[x] = 0; Dfs(x - 1, sum);
State[x] = 1; Dfs(x - 1, sum + 1);
}
}
 
int main() {
while(scanf("%d", &N) == 1 && N) {
Init();
Work();
Dfs(N - 1, 0);
printf("%d\n", ans);
}
return 0;
}

--------------------------------------------------------------------------------------

2466: [中山市选2009]树

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 561  Solved: 226
[Submit][Status][Discuss]

Description

图论中的树为一个无环的无向图。给定一棵树,每个节点有一盏指示灯和一个按钮。如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),或者从点亮到熄灭(当按之前是点亮的)。并且该节点的直接邻居也发生同样的变化。
 开始的时候,所有的指示灯都是熄灭的。请编程计算最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态。

Input

输入文件有多组数据。
 输入第一行包含一个整数n,表示树的节点数目。每个节点的编号从1到n。 
 输入接下来的n – 1行,每一行包含两个整数x,y,表示节点x和y之间有一条无向边。
 当输入n为0时,表示输入结束。

Output

对于每组数据,输出最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态。每一组数据独占一行。

Sample Input

3
1 2
1 3
0

Sample Output

1

HINT

对于100%的数据,满足1 <= n <=100。

Source

BZOJ 2466: [中山市选2009]树( 高斯消元 )的更多相关文章

  1. BZOJ 2466 中山市选2009 树 高斯消元+暴力

    题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...

  2. 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组

    [题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...

  3. BZOJ 2466 [中山市选2009]树(高斯消元)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2466 [题目大意] 给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了, ...

  4. BZOJ 2466: [中山市选2009]树

    Sol 树形DP. 听说有非常神奇的高斯消元的做法...orz... 然而我只会 \(O(n)\) 的树形DP. 首先一个点的状态只于他的父节点和子树有关,跟他 子树的子树 和 父亲的父亲 都没有任何 ...

  5. bzoj2466: [中山市选2009]树

    同上一题.(应该可以树形dp,然而我不会... #include<cstdio> #include<cstring> #include<iostream> #inc ...

  6. 【BZOJ2466】[中山市选2009]树 树形DP

    [BZOJ2466][中山市选2009]树 Description 图论中的树为一个无环的无向图.给定一棵树,每个节点有一盏指示灯和一个按钮.如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按 ...

  7. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

  8. 【bzoj4184】shallot 线段树+高斯消元动态维护线性基

    题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...

  9. 【dfs】【高斯消元】【异或方程组】bzoj1770 [Usaco2009 Nov]lights 燈 / bzoj2466 [中山市选2009]树

    经典的开关灯问题. 高斯消元后矩阵对角线B[i][i]若是0,则第i个未知数是自由元(S个),它们可以任意取值,而让非自由元顺应它们,得到2S组解. 枚举自由元取0/1,最终得到最优解. 不知为何正着 ...

随机推荐

  1. 获取考试成绩的sql语句

    as score,t_answer.id,t_answer.exams_name,t_answers.answer_id,t_answers.questions_id,t_answers.questi ...

  2. 浙大PAT 7-06 题解

    #include <stdio.h> #include <iostream> #include <algorithm> #include <math.h> ...

  3. Brew install for mac

    安装命令例如以下: curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --st ...

  4. 关于 FPGA 和 外部芯片接口时序设计

    在看这篇文章之前, 建议先好好读下这篇文章.http://download.csdn.net/detail/angelbosj/8013827. 因为我不太会用 VISio.要是哪位网友能告诉我.怎么 ...

  5. 按模板打印word防止并发操作

    /// <summary> /// /// <summary> /// 打印人员备案表 /// </summary> /// <param name=&quo ...

  6. Android布局绘制常见小问题

    一些网上分享的整理 1.Android设置Selector不同状态下颜色及图片 Selector常用状态: android:state_selected 控件选中状态,可以为true或false an ...

  7. Nio Client

    public class NIOClient { static int SIZE = 2; final static int bufferSize = 500 * 1024; static InetS ...

  8. WPF之Binding的三种简单写法

    环境 类代码 public class Person:INotifyPropertyChanged { private string name; public string Name { get { ...

  9. IO库 8.1

    题目:编写函数,接受一个istream&参数,返回值类型也是istream&.此函数须从给定流中读取数据,直到遇到文件结束标志时停止.它将读取的数据打印在标准输出上.完成这些操作后,在 ...

  10. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

    dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...