首页 > 其他分享 >树形DP->没有上司的舞会(洛谷1352)

树形DP->没有上司的舞会(洛谷1352)

时间:2024-01-18 10:45:20浏览次数:31  
标签:洛谷 int 1352 al dfs DP 上司 dp happy

题意:每个人有一个happ值,n个人,n - 1条有向边,u是v的上司,求happy值最大。 限制条件是u和v不能同时参加。

分析:没想到一个v居然有很多上司,更没想到n-1条边居然是个森林。

//没想到,一个员工居然可以有那么多上司。。
void solve(){
    int n;
    cin >> n;

    vector<int> happy(n + 1);
    for (int i = 1; i <= n; ++i){
        cin >> happy[i];
    }

    vector<int> indegree(n + 1);
    vector<vector<int>> al(n + 1);
    for (int i = 1; i < n; ++i){
        int u, v;
        cin >> u >> v;
        swap(u, v);
        indegree[v] ++;
        al[u].emplace_back(v);
    }

    int root = 0;
    for (int i = 1; i <= n; ++i){
        if (indegree[i] == 0){
            al[0].emplace_back(i);
        }
    }

    vector<array<int, 2>> dp(n + 1);
    function<void(int, int)> dfs = [&](int u, int p){
        dp[u][1] = happy[u];
        dp[u][0] = 0;
        for (const auto& v : al[u]){
            if (v != p){
                dfs(v, u);
                dp[u][0] += max(dp[v][1], dp[v][0]);
                dp[u][1] += dp[v][0];
            }
        }
    };

    dfs(0, -1);

    int ans = 0;
    for (auto& v : al[0]){
        ans += max(dp[v][0], dp[v][1]);
    }

    cout << ans << '\n';
}

标签:洛谷,int,1352,al,dfs,DP,上司,dp,happy
From: https://www.cnblogs.com/yxcblogs/p/17972003

相关文章

  • Woodpecker CI 设计分析|一个 Go 编写的开源持续集成引擎
    一、前言大家好,这里是白泽。随着Go语言在云原生领域大放异彩,开发者逐渐将目光转移到了这门语言上,而容器则是云原生时代最核心的载体。《WoodpeckerCI设计分析》系列文章将分析开源CI引擎Woodpecker的架构设计,探究Go协程是如何支持由Workflow定义的大量Task的频繁......
  • C# 中,可以使用 System.Net.Sockets 命名空间中的 UdpClient 类来发送和接收 UDP 数据
    C#中,可以使用System.Net.Sockets命名空间中的UdpClient类来发送和接收UDP数据报文。以下是一个简单的C#示例,演示如何使用UDP发送和接收数据:点击查看代码usingSystem;usingSystem.Net;usingSystem.Net.Sockets;classProgram{staticvoidMain(){......
  • 洛谷题单指南-模拟和高精度-P1601 A+B Problem
    原题链接:https://www.luogu.com.cn/problem/P1601题意解读:本题是高精度加法的模版题。知识点解析:  高精度加法:  如果一个数大到远超过整形变量的范围时,就不能使用int、long、longlong等变量来存储整数,也不能直接通过变量加法来求和。  因此,需要回到加法计算的本质,从个......
  • linux系统安装dpdk
    预安装编译dpdk所需软件dpdk20.11与之前版本相比,使用了meson和ninjia的编译方式#aptinstallpython3.8python3-pyelftools由于meson依赖python3.7及以上版本,这里选择安装python3.8如果选择pip安装meson和ninja#pip3installmesonninja--user(pip3安装meson默认安装在/......
  • 插入类dp
    按结尾数字排名进行的插入类dpT1AT_dp_tPermutation有一个长为\(N\)的正整数排列。给定一个由<和>组成长为\(N-1\)的的字符串。对于任意满足\(1\lei\leN-1\)的字符\(s_i\),如果\(s_i\)是<则\(P_i<P_{i+1}\)、如果\(s_i\)是>则\(P_i>P_{i+1}\)。求满......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • 洛谷 P8426 [JOI Open 2022] 放学路(School Road)
    洛谷传送门LOJ传送门考虑整个图是一个点双怎么做。显然如果有重边并且两条边边权一样就寄了。否则我们可以把它们当成一条边。考虑一个二度点\(u\)和与它相连的边\((v,u),(u,w)\)。我们可以把它缩成边\((v,w)\)。如果新边已经存在并且边权不等于这两条边边权就寄了。......
  • 洛谷题单指南-模拟和高精度-P1042 [NOIP2003 普及组] 乒乓球
    原题链接:https://www.luogu.com.cn/problem/P1042题意解读:分别针对11分制和21分制,输出每局比分。只需要判断一局的结束条件:得分高者如果达到11或者21,且比分间隔大于等于2分,则表示一局结束,可开始下一局,用模拟法即可解决。100分代码:#include<bits/stdc++.h>usingnamespaces......
  • dpkg/ error processing package install-info (--configure)/ installed install-inf
    背景介绍在ubuntu20.04中使用apt安装软件时会出现报错dpkg/errorprocessingpackageinstall-info(--configure)/installedinstall-infopackagepost-installationscriptsubprocessreturnederrorexitstatus126这主要是由于不完全安装导致的。解决方式是删除或编辑......
  • 【树上DP前导知识汇总】
    一、树的直径记录最长、次长,输出\(max(最长+次长)\)\(AcWing\)\(1072\)树的最长路径#include<bits/stdc++.h>usingnamespacestd;constintN=10010,M=N<<1;intn;//n个结点//链式前向星inth[N],e[M],w[M],ne[M],idx;voidadd(inta,intb,intc......