第二道树形DP,先是MLE。后来仅需改小邻接矩阵的第二个维度到30就过了。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4.  
  5. #define MAXN 6005
  6.  
  7. int rat[MAXN];
  8. int dp[MAXN][];
  9. int adj[MAXN][];
  10. bool visit[MAXN];
  11. int n;
  12.  
  13. int max(int a, int b) {
  14. return a>b ? a:b;
  15. }
  16.  
  17. void dfs(int r) {
  18. int i, v;
  19.  
  20. visit[r] = true;
  21. dp[r][] = rat[r];
  22. for (i=; i<=adj[r][]; ++i) {
  23. v = adj[r][i];
  24. if (visit[v])
  25. continue;
  26. dfs(v);
  27. // r node not attend, v get the maximum
  28. dp[r][] += max(dp[v][], dp[v][]);
  29. // r node attend, v not attend.
  30. dp[r][] += dp[v][];
  31. }
  32. }
  33.  
  34. int main() {
  35. int i, j, k;
  36. int a, b;
  37.  
  38. #ifndef ONLINE_JUDGE
  39. freopen("data.in", "r", stdin);
  40. #endif
  41.  
  42. while (scanf("%d", &n) != EOF) {
  43. for (i=; i<=n; ++i)
  44. scanf("%d", &rat[i]);
  45.  
  46. memset(adj, , sizeof(adj));
  47. memset(visit, false, sizeof(visit));
  48. memset(dp, , sizeof(dp));
  49. while (scanf("%d %d", &a, &b)!=EOF && (a||b)) {
  50. ++adj[a][];
  51. adj[a][adj[a][]] = b;
  52. ++adj[b][];
  53. adj[b][adj[b][]] = a;
  54. }
  55.  
  56. dfs();
  57. printf("%d\n", max(dp[][], dp[][]));
  58. }
  59.  
  60. return ;
  61. }

【HDOJ】1520 Anniversary party的更多相关文章

  1. 【HDU】1520 Anniversary party(树形dp)

    题目 题目 分析 带权值的树上最大独立集 代码 #include <bits/stdc++.h> using namespace std; ; int a[maxn], n, fa[max ...

  2. 【TYVJ】1520 树的直径

    [算法]树的直径 memset(a,0,sizeof(a)) #include<cstdio> #include<algorithm> #include<cstring& ...

  3. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  4. 【Poj】 p2342 Anniversary party(树形DP第一道)

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5523   Accepted: 3169 ...

  5. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  6. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

  7. 【HDOJ】【3480】Division

    DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...

  8. 【HDOJ】【2829】Lawrence

    DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...

  9. 【HDOJ】【3415】Max Sum of Max-K-sub-sequence

    DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...

随机推荐

  1. 学习微信小程序之css16常见布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. TortoiseGit上传代码到GitHub

    Github是管理软件开发的首选托管网站,12306的火车票插件一时让国内当时很多小白开发者(当然也包括我)认识到了这个网站.GitHub可以托管各种git库,并提供一个web界面,与 SourceF ...

  3. Android实现后台长期监听时间变化

    1.首先我们的目的是长期监听时间变化,事实上应用程序退出. 通过了解我们知道注冊ACTION_TIME_TICK广播接收器能够监听系统事件改变,可是 查看SDK发现ACTION_TIME_TICK广播 ...

  4. JAVA WEB实现前端加密后台解密

    最近在研究登陆密码的加密,下边上具体代码,只是给出核心代码,具体的代码视业务而定吧,给位有什么问题或者意见请留言. 加密方法用的是AES-128-CBC,BASE64用的是org.apache.com ...

  5. Ubuntu下php的一些配置问题

    1.php.ini的路径: phpinfo()里 Loaded Configuration File:/etc/php5/fpm/php.ini 要修改这个 在/etc/php5/fpm/cgi里也有 ...

  6. Java基础知识强化85:System类之arraycopy()方法(数组拷贝)

    1. arraycopy方法(数组拷贝) public static void arraycopy(object src,int srcPos,Object dest,int destPos, int ...

  7. Linux磁盘分区实战案例

    一.查看新添加磁盘   [root@localhost /]# fdisk -l   磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区 Units = ...

  8. 工作中部署使用MP平台的一些问题

    1.首先先把项目导入到myeclipse中,如果没有.classpath和.mymetadata和.project等文件,就自己创建一个web项目,然后把里面的src覆盖,webroot等文件覆盖. ...

  9. MySQL命令mysqldump参数大全

    参数参数说明--all-databases  , -A导出全部数据库.mysqldump  -uroot -p --all-databases--all-tablespaces  , -Y导出全部表空 ...

  10. XPath总结一

    这里介绍下XPath的用法: 它生成一个string对象,作为XmlNode的方法SelectSingleNode,SelectNodes的输入参数 ,以此来查询符合条件的节点. 选择当前节点:  . ...