树形dp...

dp(x, 0)表示结点x不放士兵, 由父亲控制;

dp(x, 1)表示结点x不放士兵, 由儿子控制;

dp(x, 2)表示结点x放士兵.

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

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 500009;
const int MOD = 1032992941;
 
struct edge {
int to;
edge* next;
} E[maxn << 1], *pt = E, *head[maxn];
 
void AddEdge(int u, int v) {
pt->to = v; pt->next = head[u]; head[u] = pt++;
}
 
void upd0(ll &x, int t) {
if((x += t) >= MOD) x -= MOD;
}
 
void upd1(ll &x, int t) {
x = x * t % MOD;
}
 
int N;
ll dp[maxn][3], cnt[maxn][3];
 
void init() {
scanf("%d", &N);
for(int i = 1; i < N; i++) {
int u, v;
scanf("%d%d", &u, &v);
AddEdge(--u, --v);
AddEdge(v, u);
}
}
 
void dfs(int x, int fa) {
dp[x][0] = 0; dp[x][1] = maxn; dp[x][2] = 1;
cnt[x][0] = cnt[x][1] = cnt[x][2] = 1;
ll Min, sum;
for(edge* e = head[x]; e; e = e->next) if(e->to != fa) {
dfs(e->to, x);
Min = min(min(dp[e->to][0], dp[e->to][1]), dp[e->to][2]);
sum = 0;
dp[x][2] += Min;
for(int i = 0; i < 3; i++)
if(dp[e->to][i] == Min) upd0(sum, cnt[e->to][i]);
upd1(cnt[x][2], sum);
Min = min(dp[x][1] + min(dp[e->to][1], dp[e->to][2]), dp[x][0] + dp[e->to][2]);
sum = 0;
for(int i = 1; i < 3; i++) 
if(dp[x][1] + dp[e->to][i] == Min) upd0(sum, cnt[e->to][i]);
upd1(cnt[x][1], sum);
if(dp[x][0] + dp[e->to][2] == Min)
upd0(cnt[x][1], ll(cnt[x][0]) * cnt[e->to][2] % MOD);
dp[x][1] = Min;
dp[x][0] += dp[e->to][1];
upd1(cnt[x][0], cnt[e->to][1]);
}
}
 
int main() {
init();
dfs(0, -1);
ll ans = min(dp[0][1], dp[0][2]), sum = 0;
for(int i = 1; i < 3; i++)
if(dp[0][i] == ans) upd0(sum, cnt[0][i]);
printf("%lld\n%lld\n", ans, sum);
return 0;
}

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

2314: 士兵的放置

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 114  Solved: 31
[Submit][Status][Discuss]

Description

八中有N个房间和N-1双向通道,任意两个房间均可到达.现在出了一件极BT的事,就是八中开始闹鬼了。老大决定加强安保,现在如果在某个房间中放一个士兵,则这个房间以及所有与这个房间相连的房间都会被控制.现在

老大想知道至少要多少士兵可以控制所有房间.以及有多少种不同的方案数.

Input

第一行一个数字N,代表有N个房间,房间编号从1开始到N.N<=500000,下面将有N-1行,每行两个数,代表这两个房间相连.

Output

第一行输出至少有多少个士兵才可以控制所有房间第二行输出有多少种方案数,方案数会比较大,输出除以1032992941的余数吧.

Sample Input

6
1 2
1 3
1 5
1 4
5 6

Sample Output

2
2

HINT

第一种方案是将士兵放在1号房间及6号房间

第二种方案是将士兵放在1号房间及5号房间

Source

BZOJ 2314: 士兵的放置( 树形dp )的更多相关文章

  1. 【BZOJ2314】士兵的放置 树形DP

    [BZOJ2314]士兵的放置 Description 八中有N个房间和N-1双向通道,任意两个房间均可到达.现在出了一件极BT的事,就是八中开始闹鬼了.老大决定加强安保,现在如果在某个房间中放一个士 ...

  2. BZOJ 2314 士兵的放置(支配集)

    显然是\(DP\). 设\(dp[i][0/1/2]\)代表以i为根且\(i上有士兵放置/i被控制但i上没有士兵/i没有被控制\)的最小代价. \(g[i][0/1/2]\)代表对应的方案数. 然后运 ...

  3. [BZOJ 4033] [HAOI2015] T1 【树形DP】

    题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...

  4. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  5. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...

  6. BZOJ 2435 道路修建 NOI2011 树形DP

    一看到这道题觉得很水,打了递归树形DP后RE了一组,后来发现必须非递归(BFS) 递归版本84分: #include<cstdio> #include<cstring> #in ...

  7. BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )

    一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...

  8. BZOJ 3566: [SHOI2014]概率充电器 [树形DP 概率]

    3566: [SHOI2014]概率充电器 题意:一棵树,每个点\(q[i]\)的概率直接充电,每条边\(p[i]\)的概率导电,电可以沿边传递使其他点间接充电.求进入充电状态的点期望个数 糖教题解传 ...

  9. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]

    4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...

随机推荐

  1. poj1833---字典序算法

    题意:给定一个序列,求它的下k个排列 #include <stdio.h> #include <stdlib.h> int cmp(const void *a,const vo ...

  2. virsh VMI deploy data serial xml

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>        <name> ...

  3. html中文乱码

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">改成<m ...

  4. 什么时候css会见less

    在一定程度上,css不能被视为一个节目.虽然和其他语言,它有自己的规范.编码,但它的笨拙实在让我失望. 不喜欢css是由于不管怎么优化代码.项目大到一定程序后.都会看上去一团乱.并且有时候一个bug的 ...

  5. HTML之学习笔记(十)表单元素

    html表单元素的基本格式为(必须包含在form标签中)

  6. CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位

    其实前面的标准流和浮动流都很理解,就是定位不太好理解,特别是相对定位和绝对定位,很多刚开始学的同学不好区分.因此这里,小强老师和大家一起分享CSS定位的学习. 通过我们前面的学习,我们网页布局方法: ...

  7. Tomcat使用startup启动,一闪而过,如何查看出错信息

    解决办法:打开startup.bat,通过使用run命令在原有启动窗口显示出错信息. 在startup.bat中找到:call "%EXECUTABLE%" start %CMD_ ...

  8. rac安装中遇到的问题

    ssh 建立面密码登陆时成功,但测试时却不成功,原因在于访问远端的文件时权限不够造成的: grid文件夹:755 grid账户下的.ssh文件夹:700 建立公共ip时需要设定域名:192.168.1 ...

  9. Mac上小巧实用的GIF格式录屏软件 LICEcap

    LICEcap 是一款小巧使用的Mac屏幕录制软件,它以GIF格式来录制屏幕内容,用户可以自定帧率和录制范围.这样就能控制生成文件的大小,非常便捷实用哦.点击进入下载 <ignore_js_op ...

  10. leetcode two sum python

    class Solution: # @param {integer[]} nums # @param {integer} target # @return {integer[]} def twoSum ...