BZOJ1907 树的路径覆盖
ydc题解上写着贪心,后来又说是树形dp。。。可惜看不懂(顺便骗三连)
其实就是每个叶子开始拉一条链,从下面一路走上来,遇到能把两条链合起来的就合起来就好了。
- /**************************************************************
- Problem: 1907
- User: rausen
- Language: C++
- Result: Accepted
- Time:112 ms
- Memory:1396 kb
- ****************************************************************/
- #include <cstdio>
- #include <cstring>
- using namespace std;
- const int N = 1e4 + ;
- struct edge {
- int next, to;
- edge() {}
- edge(int _n, int _t) : next(_n), to(_t) {}
- } e[N << ];
- struct tree_node {
- int fa, ans, used;
- } tr[N];
- int n;
- int first[N], tot;
- inline int read() {
- int x = ;
- char ch = getchar();
- while (ch < '' || '' < ch)
- ch = getchar();
- while ('' <= ch && ch <= '') {
- x = x * + ch - '';
- ch = getchar();
- }
- return x;
- }
- void Add_Edges(int x, int y) {
- e[++tot] = edge(first[x], y), first[x] = tot;
- e[++tot] = edge(first[y], x), first[y] = tot;
- }
- #define y e[x].to
- int dfs(int p) {
- int x, cnt = ;
- tr[p].ans = , tr[p].used = ;
- for (x = first[p]; x; x = e[x].next)
- if (y != tr[p].fa) {
- tr[y].fa = p;
- dfs(y);
- tr[p].ans += tr[y].ans;
- if (!tr[y].used) ++cnt;
- }
- if (cnt >= ) tr[p].ans -= , tr[p].used = ;
- else if (cnt == ) --tr[p].ans;
- }
- #undef y
- int main() {
- int i, T;
- T = read();
- while (T--) {
- n = read(), tot = ;
- memset(first, , sizeof(first));
- for (i = ; i < n; ++i)
- Add_Edges(read(), read());
- dfs();
- printf("%d\n", tr[].ans);
- }
- return ;
- }
BZOJ1907 树的路径覆盖的更多相关文章
- BZOJ-1907 树的路径覆盖 贪心
题意:给一个n个点的树,求树的最小路径覆盖.(这个最小路径覆盖不能有重点) 解法:往图论方向想很久,想得太复杂了,其实直接贪心.这个大佬题解写得很好: https://blog.csdn.net/bl ...
- bzoj1907: 树的路径覆盖(树形DP)
一眼题... f[i][0]表示在i连接一个子树的最小值,f[i][1]表示在i连接两个子树的最小值,随便转移... 样例挺强的1A了美滋滋... UPD:学习了2314的写法之后短了好多T T #i ...
- 【bzoj1907】树的路径覆盖 树形dp
题目描述 输入 输出 样例输入 1 7 1 2 2 3 2 4 4 6 5 6 6 7 样例输出 3 题解 树形dp 设f[x]表示以x为根的子树完成路径覆盖,且x为某条路径的一端(可以向上延伸)的最 ...
- [BZOJ] 1907: 树的路径覆盖
一个点必然被路径覆盖,根据是否为路径的端点分类 \(f[x][0]\)表示以\(x\)为根的子树,\(x\)不为端点的最小路径覆盖数 \(f[x][1]\)表示以\(x\)为根的子树,\(x\)为一条 ...
- bzoj 1907: 树的路径覆盖【贪心+树形dp】
我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...
- [BZOJ 1907] 树的路径覆盖 【树形DP】
题目链接:BZOJ - 1907 题目分析 使用树形 DP,f[x][0] 表示以 x 为根的子树不能与 x 的父亲连接的最小路径数(即 x 是一个折线的拐点). f[x][1] 表示以 x 为根的子 ...
- Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)
题意:给出一张完全图,所有的边的边权都是 y,现在给出图的一个生成树,将生成树上的边的边权改为 x,求一条距离最短的哈密顿路径. 先考虑x>=y的情况,那么应该尽量不走生成树上的边,如果生成树上 ...
- SPOJ UOFTCG - Office Mates (树的最小路径覆盖)
UOFTCG - Office Mates no tags Dr. Baws has an interesting problem. His N graduate students, while f ...
- SPOJ - UOFTCG 树的最小路径覆盖
//SPOJ - UOFTCG 树的最小路径覆盖 #include <bits/stdc++.h> #include <vector> using namespace std; ...
随机推荐
- Email移动的原理
1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...
- JavaScript new return 类的实例化
new初始化方法 简单没有return的就不写了 function Person() { this.name="hongda"; ; return "fffffff&qu ...
- HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解
Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- VS中sln和suo的区别
1.调试程序出现这个错误an error occurred while validating 解决方案:http://stackoverflow.com/questions/8648428/an-er ...
- object Add(object Before, object After, object Count, object Type);
[表达式] .Add(Before, After, Count, Type) [表达式] 一个代表 Sheets 对象的变量. Before指定工作表的对象,新建的工作表将置于此工作表之前. Afte ...
- [BZOJ3613][Heoi2014]南园满地堆轻絮 二分答案
Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者,最近 他研究起了诗词音律的问题. 在过去,诗词是需要编成曲子唱 ...
- C#学习笔记(二):变量、数据类型和运算符
变量.数据类型 给变量赋值,如果想指定float,在数字后面加上F/f:如果想指定decimal,在数字后面加上m. 0-9:48-57 A-Z:65-90 a-z:97-122 ...
- 文件查找:locate、find
文件查找:在文件系统上查找符合条件的文件: locate, find 非实时查找(数据库查找):locate //不是遍历系统文件,把当前系统目录下的所有文件抽取出来制作成一个索引(或者叫数据库), ...
- React Native控件之Picker
1. import React,{Component}from 'react'; import { AppRegistry, StyleSheet, Text, View, Picker, } fro ...
- Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队
题目链接:点击传送 D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input ...