题目链接  Round 322 Problem F

题意  给定一棵树,保证叶子结点个数为$2$(也就是度数为$1$的结点),现在要把所有的点染色(黑或白)

  要求一半叶子结点的颜色为白,一半叶子结点的颜色为黑,求边权和的最小值。

  若一条边连接的两个点颜色不一样,则该条边边权为$1$,否则为$0$。

考虑树型$DP$。

$f[x][i][j]$表示当以$x$为根的子树中有$i$个叶子结点染成黑色并且$x$的颜色为$j$的时候边权和的最小值。

这道题计算$size$的时候只考虑叶子结点,不考虑除叶子结点以外的结点。

$DP$的时候叶子结点和其他结点分开考虑,注意状态转移的时候要开个过渡数组$g$,否则在状态转移过程中出现的最小值可能会被错误地保存到最后。

时间复杂度$O(n^{2})$

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL; const int N = 5e3 + 10; int f[N][N][2], sz[N], in[N];
int n, all, root;
int g[N][2];
vector <int> v[N]; void up(int &a, int b){ a = min(a, b);} void dfs(int x, int fa){
if (in[x] == 1){
sz[x] = 1;
f[x][1][1] = 0;
f[x][0][0] = 0;
return;
}
f[x][0][0] = f[x][0][1] = 0;
for (auto u : v[x]){
if (u == fa) continue;
dfs(u, x);
memset(g, 0x3f3f3f3f, sizeof g);
dec(i, sz[x], 0){
dec(j, sz[u], 0){
up(g[i + j][1], f[x][i][1] + f[u][j][1]);
up(g[i + j][1], f[x][i][1] + f[u][j][0] + 1);
up(g[i + j][0], f[x][i][0] + f[u][j][1] + 1);
up(g[i + j][0], f[x][i][0] + f[u][j][0]);
}
}
memcpy(f[x], g, sizeof f[x]);
sz[x] += sz[u];
}
} int main(){ scanf("%d", &n);
rep(i, 2, n){
int x, y;
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
++in[x];
++in[y];
} if (n == 2) return 0 * puts("1");
rep(i, 1, n) if (in[i] == 1) ++all;
else root = i;
memset(f, 0x3f3f3f3f, sizeof f);
dfs(root, 0);
printf("%d\n", min(f[root][all / 2][0], f[root][all / 2][1]));
return 0;
}

  

Codeforces 581F Zublicanes and Mumocrates(树型DP)的更多相关文章

  1. Codeforces 581F Zublicanes and Mumocrates(树形DP)

    题目大概说有一棵树要给结点染色0或1,要求所有度为1的结点一半是0一半是1,然后问怎么染色,使两端点颜色不一样的边最少. dp[0/1][u][x]表示以u结点为根的子树中u结点是0/1色 且其子树有 ...

  2. Codeforces 149D Coloring Brackets(树型DP)

    题目链接 Coloring Brackets 考虑树型DP.(我参考了Q巨的代码还是略不理解……) 首先在序列的最外面加一对括号.预处理出DFS树. 每个点有9中状态.假设0位不涂色,1为涂红色,2为 ...

  3. Codeforces 581F Zublicanes and Mumocrates 树形dp

    Zublicanes and Mumocrates dp[ i ][ j ][ k ] 表示 以 i 为根的子树, 占领 i 的 是 j 并且第一个人占了 i 子树的 k 个叶子节点的最小值. 然后随 ...

  4. Codeforces 581F Zublicanes and Mumocrates - 树形动态规划

    It's election time in Berland. The favorites are of course parties of zublicanes and mumocrates. The ...

  5. CodeForces 160D - Distance in Tree 树型DP

    题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include& ...

  6. Codeforces 486D Valid Sets (树型DP)

    题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数. 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考 ...

  7. Codeforces 161D Distance in Tree(树型DP)

    题目链接 Distance in Tree $k <= 500$ 这个条件十分重要. 设$f[i][j]$为以$i$为子树,所有后代中相对深度为$j$的结点个数. 状态转移的时候,一个结点的信息 ...

  8. 【题解】codeforces 219D Choosing Capital for Treeland 树型dp

    题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能到达任意一 ...

  9. POJ3659 Cell Phone Network(树上最小支配集:树型DP)

    题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...

随机推荐

  1. iOS 中 AFNetworking HTTPS 的使用

    由于我们公司由HTTP转HTTPS,出现了一系列问题特此记录下. 一.HTTPS 二.App Transport Security 三.iOS 中用HTTPS 注意的问题 四.使用 AFNetwork ...

  2. LCS+LIS

    #include<iostream> #include<string> using namespace std; string a,b; ][]; int main() { w ...

  3. Jmeter微信小程序接口测试

    最近公司新项目组开发一款微信小程序电商平台,为了更好保证产品质量,因此提出了需要进行接口测试. 从接口本身来讲,对其测试与其他项目应该是一样的.所以不难理解,我们要对小程序的接口测试需要准备的 材料有 ...

  4. Vue_自定义指令

    关于Vue的自定义指令: - 在Vue中除了核心功能默认内置的指令(v-model & v-show) - Vue也允许注册自定义指令. 注意,在 Vue2.0 中,代码复用和抽象的主要形式是 ...

  5. PHP vscode+XDebug 远程断点调试服务器上的代码

    对于简单的项目或仅仅想知道某一位置的某个变量是什么值,直接使用var_dump配置exit来打印和中断就可以了,方便又快捷, 而对于大型项目的调试,或想了解某个系统的整个运行过程,xdebug可能会是 ...

  6. HDU 4101 Ali and Baba (思路好题)

    与其说这是个博弈,倒不如说是个搜索.这题思路不错,感觉很难把情况考虑周全. 在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来.如下图: 1 1 1 ...

  7. 第二阶段团队冲刺-one

    今天打算做什么: 处理第一次启动服务器500的问题.

  8. android 拓展ImageView播放GIF动画

    原生Android控件ImageView并不能支持播放GiF格式的图片.如果将一张GIF的图片放入ImageView中,它只会显示图片的第一帧,不会产生任何动画效果. Android中播放GIF动画实 ...

  9. Python读写tap设备

    #!/usr/bin/python import os import struct import fcntl import binascii TUNSETIFF = 0x400454ca IFF_TA ...

  10. idea中新建的web项目不能新建servlet

    ============ ======================================================================== 在新建的“ java ”源文 ...