ydc题解上写着贪心,后来又说是树形dp。。。可惜看不懂(顺便骗三连)

其实就是每个叶子开始拉一条链,从下面一路走上来,遇到能把两条链合起来的就合起来就好了。

  1. /**************************************************************
  2. Problem: 1907
  3. User: rausen
  4. Language: C++
  5. Result: Accepted
  6. Time:112 ms
  7. Memory:1396 kb
  8. ****************************************************************/
  9.  
  10. #include <cstdio>
  11. #include <cstring>
  12.  
  13. using namespace std;
  14. const int N = 1e4 + ;
  15.  
  16. struct edge {
  17. int next, to;
  18. edge() {}
  19. edge(int _n, int _t) : next(_n), to(_t) {}
  20. } e[N << ];
  21.  
  22. struct tree_node {
  23. int fa, ans, used;
  24. } tr[N];
  25.  
  26. int n;
  27. int first[N], tot;
  28.  
  29. inline int read() {
  30. int x = ;
  31. char ch = getchar();
  32. while (ch < '' || '' < ch)
  33. ch = getchar();
  34. while ('' <= ch && ch <= '') {
  35. x = x * + ch - '';
  36. ch = getchar();
  37. }
  38. return x;
  39. }
  40.  
  41. void Add_Edges(int x, int y) {
  42. e[++tot] = edge(first[x], y), first[x] = tot;
  43. e[++tot] = edge(first[y], x), first[y] = tot;
  44. }
  45.  
  46. #define y e[x].to
  47. int dfs(int p) {
  48. int x, cnt = ;
  49. tr[p].ans = , tr[p].used = ;
  50. for (x = first[p]; x; x = e[x].next)
  51. if (y != tr[p].fa) {
  52. tr[y].fa = p;
  53. dfs(y);
  54. tr[p].ans += tr[y].ans;
  55. if (!tr[y].used) ++cnt;
  56. }
  57. if (cnt >= ) tr[p].ans -= , tr[p].used = ;
  58. else if (cnt == ) --tr[p].ans;
  59. }
  60. #undef y
  61.  
  62. int main() {
  63. int i, T;
  64. T = read();
  65. while (T--) {
  66. n = read(), tot = ;
  67. memset(first, , sizeof(first));
  68. for (i = ; i < n; ++i)
  69. Add_Edges(read(), read());
  70. dfs();
  71. printf("%d\n", tr[].ans);
  72. }
  73. return ;
  74. }

BZOJ1907 树的路径覆盖的更多相关文章

  1. BZOJ-1907 树的路径覆盖 贪心

    题意:给一个n个点的树,求树的最小路径覆盖.(这个最小路径覆盖不能有重点) 解法:往图论方向想很久,想得太复杂了,其实直接贪心.这个大佬题解写得很好: https://blog.csdn.net/bl ...

  2. bzoj1907: 树的路径覆盖(树形DP)

    一眼题... f[i][0]表示在i连接一个子树的最小值,f[i][1]表示在i连接两个子树的最小值,随便转移... 样例挺强的1A了美滋滋... UPD:学习了2314的写法之后短了好多T T #i ...

  3. 【bzoj1907】树的路径覆盖 树形dp

    题目描述 输入 输出 样例输入 1 7 1 2 2 3 2 4 4 6 5 6 6 7 样例输出 3 题解 树形dp 设f[x]表示以x为根的子树完成路径覆盖,且x为某条路径的一端(可以向上延伸)的最 ...

  4. [BZOJ] 1907: 树的路径覆盖

    一个点必然被路径覆盖,根据是否为路径的端点分类 \(f[x][0]\)表示以\(x\)为根的子树,\(x\)不为端点的最小路径覆盖数 \(f[x][1]\)表示以\(x\)为根的子树,\(x\)为一条 ...

  5. bzoj 1907: 树的路径覆盖【贪心+树形dp】

    我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...

  6. [BZOJ 1907] 树的路径覆盖 【树形DP】

    题目链接:BZOJ - 1907 题目分析 使用树形 DP,f[x][0] 表示以 x 为根的子树不能与 x 的父亲连接的最小路径数(即 x 是一个折线的拐点). f[x][1] 表示以 x 为根的子 ...

  7. Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)

    题意:给出一张完全图,所有的边的边权都是 y,现在给出图的一个生成树,将生成树上的边的边权改为 x,求一条距离最短的哈密顿路径. 先考虑x>=y的情况,那么应该尽量不走生成树上的边,如果生成树上 ...

  8. SPOJ UOFTCG - Office Mates (树的最小路径覆盖)

    UOFTCG - Office Mates no tags  Dr. Baws has an interesting problem. His N graduate students, while f ...

  9. SPOJ - UOFTCG 树的最小路径覆盖

    //SPOJ - UOFTCG 树的最小路径覆盖 #include <bits/stdc++.h> #include <vector> using namespace std; ...

随机推荐

  1. Email移动的原理

    1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...

  2. JavaScript new return 类的实例化

    new初始化方法 简单没有return的就不写了 function Person() { this.name="hongda"; ; return "fffffff&qu ...

  3. HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. VS中sln和suo的区别

    1.调试程序出现这个错误an error occurred while validating 解决方案:http://stackoverflow.com/questions/8648428/an-er ...

  5. object Add(object Before, object After, object Count, object Type);

    [表达式] .Add(Before, After, Count, Type) [表达式] 一个代表 Sheets 对象的变量. Before指定工作表的对象,新建的工作表将置于此工作表之前. Afte ...

  6. [BZOJ3613][Heoi2014]南园满地堆轻絮 二分答案

    Description 小 Z 是 ZRP(Zombies’ Republic of Poetry,僵尸诗歌共和国)的一名诗歌爱好者,最近 他研究起了诗词音律的问题.   在过去,诗词是需要编成曲子唱 ...

  7. C#学习笔记(二):变量、数据类型和运算符

    变量.数据类型       给变量赋值,如果想指定float,在数字后面加上F/f:如果想指定decimal,在数字后面加上m.   0-9:48-57 A-Z:65-90 a-z:97-122   ...

  8. 文件查找:locate、find

    文件查找:在文件系统上查找符合条件的文件: locate, find 非实时查找(数据库查找):locate  //不是遍历系统文件,把当前系统目录下的所有文件抽取出来制作成一个索引(或者叫数据库), ...

  9. React Native控件之Picker

    1. import React,{Component}from 'react'; import { AppRegistry, StyleSheet, Text, View, Picker, } fro ...

  10. Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队

    题目链接:点击传送 D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input ...