题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616

这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎……

搜索AC代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdlib>
  6. #include <cmath>
  7. #include <vector>
  8. #include <list>
  9. #include <deque>
  10. #include <queue>
  11. #include <iterator>
  12. #include <stack>
  13. #include <map>
  14. #include <set>
  15. #include <algorithm>
  16. #include <cctype>
  17. #include <ctime>
  18. #pragma comment(linker, "/STACK:16777216")
  19. using namespace std;
  20.  
  21. typedef __int64 LL;
  22. const int N=50005;
  23. const int M=55555555;
  24. const int INF=0x3f3f3f3f;
  25. const double PI=acos(-1.0);
  26.  
  27. vector<int>q[N];
  28. int xh[N],w[N];
  29. int n,c,sm;
  30. bool vis[N];
  31.  
  32. struct love
  33. {
  34. int i,sum;
  35. int cc;
  36. }r,e,my[M];
  37.  
  38. void BFS(int s)
  39. {
  40. memset(vis,0,sizeof(vis));
  41. vis[s]=1;
  42. vector<int>::iterator it;
  43. r.i=s;
  44. r.sum=xh[s]; sm=max(sm,r.sum);
  45. r.cc=c-w[s];
  46. if(r.cc==0)
  47. return ;
  48. int he=0,ta=0;
  49. my[ta++]=r;
  50. while(he!=ta)
  51. {
  52. e=my[he++];
  53. if(he==M)
  54. he=0;
  55. for(it=q[e.i].begin();it!=q[e.i].end();it++)
  56. {
  57. r=e;
  58. int k=*it;
  59. if(vis[k]) continue;
  60. vis[k]=1;
  61. r.i=k;
  62. r.sum+=xh[k]; sm=max(sm,r.sum);
  63. r.cc-=w[k];
  64. if(r.cc>0)
  65. {
  66. my[ta++]=r;
  67. if(ta==M)
  68. ta=0;
  69. }
  70. }
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. int T;
  77. scanf("%d",&T);
  78. while(T--)
  79. {
  80. scanf("%d%d",&n,&c);
  81. for(int i=0;i<n;i++)
  82. {
  83. scanf("%d%d",&xh[i],&w[i]);
  84. }
  85. for(int i=0;i<=n;i++)
  86. q[i].clear();
  87. for(int i=0;i<n-1;i++)
  88. {
  89. int a,b;
  90. scanf("%d%d",&a,&b);
  91. q[a].push_back(b);
  92. q[b].push_back(a);
  93. }
  94. int Max=-1;
  95. for(int i=0;i<n;i++)
  96. {
  97. sm=0;
  98. if(q[i].size()==1)
  99. BFS(i);
  100. if(Max<sm)
  101. Max=sm;
  102. }
  103. cout<<Max<<endl;
  104. }
  105. return 0;
  106. }

树形DP代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cstring>
  5. using namespace std;
  6. #define N 50500
  7. int trap[N],val[N],n,C,vis[N],ans;
  8. int dp[N][5][2];
  9. vector<int>vec[N];
  10.  
  11. void DP(int u)
  12. {
  13. vis[u]=1;
  14. dp[u][trap[u]][0]=dp[u][trap[u]][1]=val[u];
  15. int v;
  16. for(int i=0;i<vec[u].size();++i)
  17. {
  18. v=vec[u][i];
  19. if(vis[v]) continue;
  20. DP(v);
  21. for(int j=0;j<=C;++j)
  22. for(int k=0;j+k<=C;++k)
  23. {
  24. if(j!=C) // j=C的时候已经停止了,不会再往子节点跑了
  25. ans=max(ans,dp[u][j][0]+dp[v][k][1]);
  26. if(k!=C) // 同理
  27. ans=max(ans,dp[u][j][1]+dp[v][k][0]);
  28. if(j+k<C) // 0表示从子树方向往根节点跑,子树可能是非陷阱的点,
  29. //假如j+k==C,题意要求到达C要停止,但按dp[v][k][0]记录的,还会继续跑,所以不行
  30. ans=max(ans,dp[u][j][0]+dp[v][k][0]);
  31. //if(j+k<C)
  32. //ans=max(ans,dp[u][j][1]+dp[v][k][1]);
  33. }
  34. for(int j=0;j+trap[u]<=C;++j)
  35. dp[u][j+trap[u]][0]=max(dp[u][j+trap[u]][0],dp[v][j][0]+val[u]);
  36. for(int j=1;j+trap[u]<=C;++j) // 1表示从根节点往下走的,1->0是不可取的,因为算上1后,已经满C了,就不会再走了,所以不能更新
  37. dp[u][j+trap[u]][1]=max(dp[u][j+trap[u]][1],dp[v][j][1]+val[u]);
  38. }
  39. }
  40. int main ()
  41. {
  42. int ncase;scanf("%d",&ncase);
  43. while(ncase--)
  44. {
  45. scanf("%d%d",&n,&C);
  46. for(int i=0;i<n;++i)
  47. vec[i].clear();
  48. memset(vis,0,sizeof(vis));
  49. memset(dp,0,sizeof(dp));
  50. ans=0;
  51. for(int i=0;i<n;++i)
  52. scanf("%d%d",&val[i],&trap[i]);
  53. int u,v;
  54. for(int i=1;i<n;++i)
  55. {
  56. scanf("%d%d",&u,&v);
  57. vec[u].push_back(v);
  58. vec[v].push_back(u);
  59. }
  60. DP(0);
  61. printf("%d\n",ans);
  62. }
  63. return 0;
  64. }

HDU 4616 Game (搜索)、(树形dp)的更多相关文章

  1. Install Air Conditioning HDU - 4756(最小生成树+树形dp)

    Install Air Conditioning HDU - 4756 题意是要让n-1间宿舍和发电站相连 也就是连通嘛 最小生成树板子一套 但是还有个限制条件 就是其中有两个宿舍是不能连着的 要求所 ...

  2. POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题

    一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...

  3. hdu 5452 Minimum Cut 树形dp

    Minimum Cut Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...

  4. HDU 1520 Anniversary party [树形DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...

  5. hdu 1520Anniversary party(简单树形dp)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  7. HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价

    Information Disturbing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/ ...

  8. HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca

    Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...

  9. HDU - 3586 Information Disturbing 树形dp二分答案

    HDU - 3586 Information Disturbing 题目大意:从敌人司令部(1号节点)到前线(叶子节点)的通信路径是一个树形结构,切断每条边的联系都需要花费w权值,现在需要你切断前线和 ...

  10. HDU 1011 Starship Troopers 树形DP 有坑点

    本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派 ...

随机推荐

  1. .NET vs JAVA

    一个同事写一个方案,让我补充下.NET和 JAVA语言的优缺点,以下是我的回复: 老X你好! 我觉得这个问题,本质上不是java和.net两个开发语言方面的比较,单纯从这两个开发语言来讲,部分伯仲,在 ...

  2. Delphi的RTTI还分为对类和对象的判断,以及对普通属性的判断——相比之下,C++的RTTI实在太弱!

    堂堂C++沦落到这个地步,也实在是够可怜的.

  3. SharePoint 2013的100个新功能之搜索(二)

    一:名称建议 人员搜索中新的“名称建议”功能,微软引入了一种简单.直观的方式来根据名称找到用户.输入一个或多个字符,查看全部以其开头的名称,在所有的用户描述数据库都可用,在人员索引中也因此一样可用.该 ...

  4. VB.net数据库编程(03):一个SQLserver连接查询的简单样例

    这个样例,因为在ADO.net入门已经专门学了,再次进行复习 一下. 主要掌握连接字串的情况. 过程就是: 1.引用System.Data.SqlClient.而Access中引用 的是System. ...

  5. QT使用scrollarea显示图片,完美解决方案

    需求: 在界面上点击“显示图片”按钮,会调用scrollarea窗口显示图片,窗口大小能根据图片大小自动调整,但是最大为1024*768,图片过大就要有滚动条来显示 IDE环境: QT Creator ...

  6. 【开发手记一】老生常谈:简简单单配置ZED板开发环境

    说明:整理之前项目博客,此系列之前发表于与非网 http://www.openhw.org/module/forum/thread-552476-1-1.html 在拿到开发板和配套教材之前,我们小组 ...

  7. 几本不错的CPU设计以及VLSI的书籍

    1. Microprocessor Design Principales and Practrices with VHDL  特点:电路与VHDL一一对应,比较清楚,而且还用MAX+plus进行仿真 ...

  8. Android switch 中 case expressions must be constant expressions 错误

    刚才导入android zxing 条码 的demo测试,发现出现如下错误 case expressions must be constant expressions 经检查,项目被设置成librar ...

  9. 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API

    原文:[ASP.NET Web API教程]2.3 与实体框架一起使用Web API 2.3 Using Web API with Entity Framework 2.3 与实体框架一起使用Web ...

  10. Jsp中使用数据库连接池.

    原文 Jsp中使用数据库连接池. 1. 在tomcat服务器目录下面的conf中找到一个叫Context.xml的配置文件,在其中加入以下代码 <Resource name="jdbc ...