zoukankan      html  css  js  c++  java
  • 61-结点选择(树形dp)

                      算法训练 结点选择  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述

    有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?

    输入格式

    第一行包含一个整数 n 。

    接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。

    接下来一共 n-1 行,每行描述树上的一条边。

    输出格式
    输出一个整数,代表选出的点的权值和的最大值。
    样例输入
    5
    1 2 3 4 5
    1 2
    1 3
    2 4
    2 5
    样例输出
    12
    样例说明
    选择3、4、5号点,权值和为 3+4+5 = 12 。
    数据规模与约定

    对于20%的数据, n <= 20。

    对于50%的数据, n <= 1000。

    对于100%的数据, n <= 100000。

    权值均为不超过1000的正整数。

    参考:博客:http://blog.csdn.net/qiuchang008/article/details/21296923  

                视屏:https://www.bilibili.com/video/av12194537/?from=search&seid=11021974091564336752

    #include <bits/stdc++.h>
    using namespace std;
    vector <int> mp[100002];
    int v[100002][2];  //v[i][0]表示不选i时的和;v[i][1]表示选i时的和 
     
    
    void dfs(int s, int z){ //当前节点和它的前一个节点 
    	for(int i = 0; i < mp[s].size(); i++){ //遍历当前节点的子节点 
    		int x = mp[s][i];
    		if(x != z){    //如果当前节点的子节点和前一个节点相同,则是重复了 
    			dfs(x, s); //递归下去 
    			v[s][0] += max(v[x][1], v[x][0]);  //如果当前节点不选,则最大值为它与后一个节点选或不选情况下的最大值的和 
    			v[s][1] += v[x][0];	 //如果当前节点选了,那后一个节点就不能选		 
    		}
    	}
    }
    
    int main(){
    	std::ios::sync_with_stdio(false);
    	int n; 
    	cin >> n;
    	for(int i = 1; i <= n; i++){
    		cin >> v[i][1];
    	}
    	for(int i = 0; i < n - 1; i++){
    		int x, y;
    		cin >> x >> y;
    		mp[x].push_back(y);   
    		mp[y].push_back(x); //无向树 
    	}
    	for(int i = 1; i <= n; i++){ //找一个叶子节点,便于最后的确定答案,但不是必要的,若以总是以1位起始点也可以 
    		if(mp[i].size() == 1){
    			dfs(i, -1);
    			cout << max(v[i][0], v[i][1]) << endl;
    			break;
    		}
    	}
    	return 0;
    } 
    

      

  • 相关阅读:
    块级元素与行级元素(内联元素)
    css中属性值继承小解
    form表单
    html,xhtml和xml
    html中的标签分类
    如何把HTML标记分类
    实现对HashMap的value排序
    装饰者模式
    实现一个简单的二叉树容器,并且实现中序、先序、后续遍历
    Java中java.util.concurrent包下的4中线程池代码示例
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8516802.html
Copyright © 2011-2022 走看看