Sol

树形DP.

听说有非常神奇的高斯消元的做法...orz...

然而我只会 \(O(n)\) 的树形DP.

首先一个点的状态只于他的父节点和子树有关,跟他 子树的子树 和 父亲的父亲 都没有任何关系.

这样就可以DP了.

\(f[i][0/1][0/1]\) 表示\(i\)节点,点了 \(0/1\) 次,状态是 \(0/1\) (暗或亮).

然后就瞎转移就可以了,具体看代码吧.

Update:一个点的子节点状态要求是一样的:要么全关,要么全开.这样就可以DP了.

Code

/**************************************************************
Problem: 2466
User: BeiYu
Language: C++
Result: Accepted
Time:4 ms
Memory:1292 kb
****************************************************************/ #include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std; const int N = 105;
const int INF = 0x03ffffff; int n;
int f[N][2][2];
vector<int> g[N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; } void DP(int u,int fa){
// if(fa&&g[u].size()==1){ f[u][0][0]=0,f[u][0][1]=INF,f[u][1][0]=INF,f[u][1][1]=1;return; }
int t0=0,t1=INF,t2=INF,t3=0;
for(int i=0,lim=g[u].size(),v;i<lim;i++) if((v=g[u][i])!=fa){
DP(v,u);
int s0=t0,s1=t1,s2=t2,s3=t3;
t0=min(s1+f[v][1][1],s0+f[v][0][1]);
t1=min(s1+f[v][0][1],s0+f[v][1][1]);
t2=min(s3+f[v][1][0],s2+f[v][0][0]);
t3=min(s3+f[v][0][0],s2+f[v][1][0]);
}
f[u][0][0]=t0,f[u][0][1]=t1;
f[u][1][0]=t2+1,f[u][1][1]=t3+1;
}
int main(){
// freopen("in.in","r",stdin);
for(;n=in();){
for(int i=1;i<N;i++) g[i].clear();
for(int i=1,u,v;i<n;i++) u=in(),v=in(),g[u].push_back(v),g[v].push_back(u);
DP((n+1)/2,0);
cout<<min(f[(n+1)/2][1][1],f[(n+1)/2][0][1])<<endl;
// DP(1,0);
// cout<<min(f[1][1][1],f[1][0][1])<<endl;
// for(int i=1;i<=n;i++)
// cout<<i<<"->"<<f[i][0][0]<<" "<<f[i][0][1]<<" "<<f[i][1][0]<<" "<<f[i][1][1]<<endl;
// cout<<"*******************"<<endl;
}return 0;
}

  

BZOJ 2466: [中山市选2009]树的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. [bzoj2466][中山市选2009]树_树形dp

    树  bzoj-2466 中山市选-2009 题目大意:给定一棵树,每一个点有一个按钮和一个灯泡.如果按下一个点的按钮那么和这个点直接相连的点包括这个点的灯泡的状态会改变.如果是点亮就会变成熄灭,如果 ...

  8. BZOJ 2463: [中山市选2009]谁能赢呢?

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1887  Solved: 1390[Submit][Sta ...

  9. bzoj 2463 [中山市选2009]谁能赢呢?(博弈)

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1290  Solved: 944[Submit][Stat ...

随机推荐

  1. MySQL增加列,修改列名、列属性,删除列

    mysql修改表名,列名,列类型,添加表列,删除表列 alter table test rename test1; --修改表名 alter table test add  column name v ...

  2. Web Api系列教程第2季(OData篇)(一)——OData简介和一个小应用

    第一季的链接以及系列导航:http://www.cnblogs.com/fzrain/p/3490137.html 在这里,首先要感谢Taiseer Joudeh不断的为我们带来最新的技术分享,楼主对 ...

  3. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  4. ecshop上传图片2

    html代码 <tr> <td class="label">{$lang.lab_picture}</td> <td> <in ...

  5. jQM基本代码

    <div data-role="page"> <div data-role="header" data-position="fixe ...

  6. Lua 之面向对象编程

    Lua 之面向对象编程 Lua并不是为面向对象而设计的一种语言,因此,仅从原生态语法上并不直接支持面向对象编程,但Lua的设计中仍然包含了很多面向对象的思想,理解它们也更有助于理解Lua自身的一些高级 ...

  7. Python-面向对象编程(二)

    面向对象进阶篇: 初级篇中我们介绍了面向对象基本知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 2.介绍了类中的对象.方法和属性及类中内置的方法 3.类 是一个模板 ...

  8. OC-基本

    #import <Foundation/NSObjCRuntime.h> //import: //1,同#include一样, 拷贝文件内容 //2,可以自动防止文件的内容被重复拷贝 /* ...

  9. FMDB 多线程使用

    在App中保持一个FMDatabaseQueue的实例,并在所有的线程中都只使用这一个实例. [FMDatabaseQueue databaseQueueWithPath:path]; FMDatab ...

  10. visio2007使用记录

    安装时, 需要有选择性的安装, 不是所有的组件 都需要安装, 如office工具, office共享功能, visio中的.net可编程支持就用不着安装.... visio中的cad(加载项), 可以 ...