问题描述
有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少? 输入格式
第一行包含一个整数 n 。 接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。 接下来一共 n- 行,每行描述树上的一条边。 输出格式
输出一个整数,代表选出的点的权值和的最大值。
样例输入 样例输出 样例说明
选择3、、5号点,权值和为 ++ = 。
数据规模与约定
对于20%的数据, n <= 。 对于50%的数据, n <= 。 对于100%的数据, n <= 。 权值均为不超过1000的正整数。

思路:

1.使用转移方程,从而满足题目要求(如果一个点被选择了,那么在树上和它相邻的点都不能被选择.)

转移方程为:

dp[u][1]+=dp[v][0];//选择了u结点,则与它邻接的结点不选;

dp[u][0]+=max(dp[v][0],dp[v][1]);不选择u结点,则与它邻接的结点选择结果最大的;

相关链接:http://blog.csdn.net/buctyyzyn/article/details/43484991

2.存储数据时,使用解链式向前星结构(邻接表);

  以题目为例,分析解链式向前星结构

  (皆为双向箭头)

  1->输入的顺序依次为:

  1 2

  1 3

  2 4

  2 5

  

  2->按照图以及输入模拟:

  

  从而实现深度优先搜索.

相关链接:http://blog.csdn.net/acdreamers/article/details/16902023

疑问:用C提交代码会出现超时现象?

示例代码:

 #include <stdio.h>
#include <string.h> #define MAX(x,y) (x)>(y)?(x):(y)
#define Max_ 10010 int M = ;
int dp[Max_][];
int head[Max_]; struct edge{
  int to; /*记录子节点的权值*/
  int next; /*记录当前节点的另一个子节点的索引*/
}e[Max_*]; void add(int from,int to)
{
  e[M].to = to;
  e[M].next = head[from];
  head[from] = M++;
  return ;
} void dfs(int x, int pre)
{
  int i = , k = ;
  for (i = head[x] ; i != - ; i = e[i].next)
  {
    k = e[i].to;
    if (k == pre)
    {
      continue; /*即当前节点无子节点*/
    }
    dfs(k,x); /*k->当前节点 , x->父节点*/
    dp[x][] += MAX(dp[k][],dp[k][]);
    dp[x][] += dp[k][];
  }
  return ;
} int main(void)
{
  int n = , i = , from = , to = ;
  
  /*节点数*/
  scanf("%d",&n);
  memset(head,-,sizeof(head));
  memset(dp,,sizeof(dp));   /*各节点权值*/
  for (i = ; i <= n ; i ++)
  {
    scanf("%d",&dp[i][]);
  }   /*节点间的连接*/
  for (i = ; i <= n- ; i ++)
  {
    scanf("%d %d",&from,&to);
    add(from,to);
    add(to,from);
  }   dfs(,-);
  printf("%d",MAX(dp[][],dp[][]));
  return ;
}

ALGO-4_蓝桥杯_算法训练_结点选择的更多相关文章

  1. [蓝桥杯]ALGO-20.算法训练_求先序排列

    问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...

  2. [蓝桥杯]ALGO-16.算法训练_进制转换

    问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样 ...

  3. [蓝桥杯]ALGO-15.算法训练_旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  4. [蓝桥杯]ALGO-124.算法训练_数字三角形

    问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●<三角形行数≤: ●三角 ...

  5. [蓝桥杯]ALGO-122.算法训练_未名湖边的烦恼

    问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...

  6. [蓝桥杯]ALGO-116.算法训练_最大的算式

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  7. [蓝桥杯]ALGO-101.算法训练_图形显示

    问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...

  8. [蓝桥杯]ALGO-97.算法训练_排序

    题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...

  9. [蓝桥杯]ALGO-92.算法训练_前缀表达式

    问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为 ...

  10. [蓝桥杯]ALGO-90.算法训练_出现次数最多的整数

    问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...

随机推荐

  1. Python zipfile 编码问题

    zipfile默认对于文件名编码只识别cp437和utf-8 对于采用其他编码方式的文件,zipfile解压出来的就会是乱码 我们可以先把它encode成cp437然后再decode成GBK 最后在把 ...

  2. 模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

    package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  3. hdu 1013 过山车 匈牙利算法(代码+详细注释)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. 没有添加spring mvc 默认依赖包产生的错误

    启动tomcat的时候提示:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.Li ...

  5. Windows折腾之路 兼谈纯净强迫情节

    早期新鲜感 想当年,终于有了第一台属于自己自由处置的电脑,1.2Ghz的CPU,256兆的内存.这在CPU刚刚上1G的年代,不说顶级,也算主流.操作系统呢,在别人的帮助下,装上新鲜的XP,各种的华丽, ...

  6. Linux更改文件权限命令

    chmod命令 1.格式:chmod [-cfvR][--help][--version]mode file 2.参数 1)必要参数 -c 当发送改变时,报告处理信息 -f 错误信息不输出 -R 处理 ...

  7. 简单shell实现局域网IP扫描

    #!/bin/bash network=$1 time=$(date +%H%M%S) for i in $(seq $2 $3) do ping -c 1 -w 2 $network.$i > ...

  8. iOS 去除警告 看我就够了

    你是不是看着开发过程中出现的一堆的警告会心情一阵烦躁,别烦躁了,看完此文章,消除警告的小尾巴. 一.SVN 操作导致的警告 1.svn删除文件后报错 ”xx“is missing from worki ...

  9. kafka集群安装,配置

    1.安装+配置(集群) 192.168.0.10.192.168.0.11.192.168.0.12(每台服务器kafka+zookeeper) # kafka依赖java环境,需要提前安装好jdk. ...

  10. 强化学习 CartPole实验的一些启发 有没有可能设计一个新的实验呢?(杆子可以向360度方向倾倒,可行吗?)

    最近在看强化学习方面的东西,突然想到了这么一个事情,那就是经典的CartPole游戏我们改变一下,或者说升级一下,那么使用强化学习是否能得到不错的效果呢? 原始游戏如图: 一点个人的想法: ===== ...