4742. 电(acw每日一题)

news2024/10/5 21:18:23

来源:Google Kickstart2022 Round H Problem C

题目描述

某城市有 N个电力节点,编号 1∼N。

这些电力节点形成的电力网络,可以看作一个 N 个节点 N−1 条边的连通图。

每个电力节点都有一个固定的电容,其中第 i 个节点的电容为 Ai。

现在,可以选择其中一个节点进行供电,其它节点也可以根据实际连接以及具体电容情况接收电力。

具体来说,如果第 i 个节点通电,那么它也可以将电力传输给其它所有与它直接连接且电容严格小于 Ai 的节点。

我们希望通过合理选择初始供电节点,从而使得尽可能多的节点能够通电。

请你计算并输出可以通电的最大节点数量。

输入格式

第一行包含整数 T,表示共有 T组测试数据。

每组数据第一行包含整数 N。

第二行包含 N 个整数 A1,A2,…,AN。

接下来 N−1行,每行包含两个整数 Xi,Yi表示节点 Xi 和 Yi 之间存在直接连接。

输出格式

每组数据输出一个结果,每个结果占一行。

结果表示为 Case #x: y,其中 x为组别编号(从 1 开始),y 为可以通电的最大节点数量。

数据范围

1≤T≤100,
1≤Ai≤10^9,
1≤Xi,Yi≤N,
一个测试点内最多 15 组数据满足 1≤N≤2×10^5,其余数据满足 1≤N≤10^3。

输入样例:

2
5
1 2 3 4 3
1 3
2 3
4 3
4 5
6
1 2 3 3 1 4
3 1
3 2
3 4
4 5
1 6

输出样例:

Case #1: 5
Case #2: 3

样例解释

在 Case 1 中,最佳方案是给第 4 个节点供电,这样可以将电力传输到所有节点。

注意,如果给第 3 个节点供电,则电力只会传输至第 1,2 个节点,而无法传输至第 4 个节点,这样只有三个节点可以通电。

在 Case 2 中,最佳方案是给第 3 个节点供电,这样可以将电力传输至第 1,2个节点,但是无法传输至第 4 个节点,因为 A4 并不严格小于 A3。

注意,如果给第6 个节点供电,则电力只会传输至第 1 个节点,如果给第 4 个节点供电,则电力只会传输至第 5 个节点。

解题思路

n个点,n-1条边,树形结构。

边为有向边,根据节点的电容大小决定方向。

求通电的最大节点数,即某个点满足:以该点为起点,联通点的数量最多。例如案例1,节点4为最优解,通电的最大节点数为w[4] = 1+ w[3] + w[5]。明显是一道记忆化搜索问题。

整体思路:存节点权值,存节点之间的边,从节点1开始到节点n,用记忆化搜索求出每个节点的联通点数。

完整代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 2e5+10, M = N*2;

int n, T;
int h[N], e[M], ne[M], idx;
int w[N];
int f[N];

void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

int dp(int u){
    if(f[u] != -1) return f[u];
    
    int res = 1;
    for (int i = h[u]; ~i; i = ne[i]){
        int j = e[i];
        if(w[u] > w[j]) res += dp(j);
    }
    f[u] = res;
    
    return res;
}

int main()
{
    cin>>T;
    for (int cases = 1; cases <= T; cases ++ ){
        cin>>n;
        for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);
        
        memset(h, -1, (n + 1) * 4);
        idx = 0;
        
        for(int i=0;i<n-1;i++){
            int a, b;
            scanf("%d%d", &a, &b);
            add(a, b), add(b,a);
        }
        
        memset(f, -1, (n + 1) * 4);
        
        int res = 0;
        for(int i = 1; i <= n; i++){
            res = max(res, dp(i));
        }
        
        printf("Case #%d: %d\n", cases, res);
    }
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS 备忘录-基础内容

目录 1、CSS的基本结构 2、样式表的来源以及优先级 3、选择器的优先级 4、源码顺序 5、px、em、rem单位 6、视口相对单位 7、使用 calc() 来定义属性值 8、一些无单位的属性 9、自定义属性 10、使用 JavaScript 来动态修改自定义属性 11、overflow 属性 12、子元素…

【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

文章目录 定时器1_定时中断定时器2_定时中断定时器3_定时中断定时器4_定时中断定时器5_定时中断 高级定时器和普通定时器的区别&#xff08;https://zhuanlan.zhihu.com/p/557896041&#xff09;&#xff1a; 定时器1_定时中断 TIM1是高级定时器&#xff0c;使用的时钟总线是R…

bochs编译安装

编译命令 ./configure --prefix‘/usr/local/bochs2.7’ --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 make sudo make install 配置文件 bochsrc # configuration file generated by Bochs plugin_ctrl: unmapped1, biosde…

让开源项目从易用到好用 | 亚马逊的开源文化

亚马逊的领导力准则是亚马逊文化的核心&#xff0c;它如同亚马逊的 DNA 融入贯穿每一个重要决策&#xff0c;深深影响着每一位亚麻人、影响着每一位亚马逊的客户、合作伙伴以及每一位亚马逊云科技的构建者。同时&#xff0c;亚马逊的领导力准则对亚马逊与开源的互动方式也产生着…

如何设计一个文件系统?需要考虑哪些因素?

文件系统的实现 在对文件有了基本认识之后&#xff0c;现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么&#xff0c;如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间…

数字孪生和GIS融合会为城市交通带来哪些便利?

数字孪生和GIS的融合对于城市交通领域带来了诸多便利&#xff0c;从智能交通管理到出行体验的提升&#xff0c;为城市交通带来了全新的发展机遇。 首先&#xff0c;数字孪生技术与GIS的结合可以实现智能交通管理。通过GIS建立城市交通网络的数字孪生模型&#xff0c;可以实时模…

程序员找工作难!拿到外包公司的 offer 我应该去么?

引言 前一阵子有一个帖子引起了非常广泛的讨论&#xff0c;描述的就是一个公司的外包工作人员&#xff0c;加班的时候因为吃了公司给员工准备的零食,被公司的HR当场批评&#xff01;这个帖子一发出来&#xff0c;让现在测试行业日益新增的外包公司备受关注。那么外包公司和非外…

Qt开发1--QCustomPlot的第一个示例

本文记录了在Linux上使用QCustomPlot进行一个基本绘制所需的完整过程&#xff0c;包括如何使用qtcreator&#xff0c;编辑ui以及编写相应的C代码。以下是详细步骤&#xff1a; 1、使用qtcreator启动开发环境&#xff1a; [blctrlmain-machine qt]$ qtcreator 启动后&#xf…

GBDT精讲

GBDT算法的流程 首先GBDT是通过采用加法模型(即基函数的线性组合)&#xff0c;以及不断减小训练过程产生的残差来达到将数据分类或回归的算法。 GBDT通过多轮迭代&#xff0c;每轮迭代产生一个弱分类器&#xff0c;每个分类器在上一轮分类器的梯度(如果损失函数是平方损失函数…

Quiz 4: Functions | Python for Everybody 配套练习_解题记录

文章目录 课程简介Quiz 4: Functions 单选题&#xff08;1-9&#xff09;编程题Exercise 4.6 课程简介 Python for Everybody 零基础程序设计&#xff08;Python 入门&#xff09; This course aims to teach everyone the basics of programming computers using Python. 本课…

JAVA2

文章目录 前言 前言 创建&#xff0c;编译java&#xff08;每4修改一次就要重新编译&#xff01;&#xff09; 第一个程序&#xff1a; 解决中文乱码问题&#xff1a; 效果&#xff1a; 总结&#xff1a;

管理类联考——英语——趣味篇——词根词汇——按频次分类——高频词汇——List1

优化原书记忆方法&#xff0c;轻松搞定考研单词 摒弃了传统的以字母顺序排序的方法&#xff0c;结合近20年考研真题&#xff0c;通过电脑搜索等方法对核心词进行科学统计&#xff0c;将核心词有机地分为高频词汇、常考词汇、中频词汇、低频词汇等4大部分&#xff0c;同时还补充…

一个三极管和稳压管构成的简易稳压电源

一个三极管和稳压管构成的简易稳压电源 先看电路 原理分析&#xff1a; 实际使用中可以加入合适的滤波电容。 上面的电路原理看着比较简单&#xff0c;但还是有不少要注意的地方。 来看看仿真电路的结果&#xff1a; 可以看到&#xff0c;输出的电压并不是我们想要的结果&am…

高压线路距离保护程序逻辑原理(五)

六、系统振荡的判断与振荡闭锁程序逻辑框图 &#xff08;一&#xff09;系统振荡概述 电力系统的振荡大致可以分为两种情况&#xff1a;一种是静稳破坏引起系统振荡&#xff0c;另一种是由于系统内故障切除时间过长&#xff0c;导致系统的两侧电源之间的不同步而引起的系统振…

【单片机】MSP430单片机,1.3寸 IIC OLED ,显示驱动

文章目录 main.coled.holedfont.h main.c #include <msp430.h> #include "OLED.h"int main( void ) {WDTCTL WDTPW WDTHOLD; /* Stop WDT */if ( CALBC1_8MHZ 0xFF ) /* If calibration constant erased */{while ( 1 ); /* do n…

C++ DAY4

1.思维导图 2.运算符重载 #include <iostream> using namespace std;class Person { private:int age;int *p; public://1.无参构造Person():p(new int(89)){age 18;}//2.有参构造Person(int age,int num){this->age age;this->pnew int(num);}//3.拷贝构造函数…

数据库中的日期函数DM和mysql都通用,计算年月日时分秒,获取日期之间相差的值

select MINUTE(date) from t_test; year month day hour minute second --对应年月日时分秒 select date from t_test select MINUTE(createtime),to_char(sysdate(),yyyy-MM-dd) select TIMESTAMPDIFF(minute,date,now()),date from t_test DateUtil.between(new Date(),ne…

小程序底层技术机制解读:版本更新与底层运行原理

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言小程序版本更新机制…

Day.3 LeetCode刷题练习(反转链表)

题目&#xff1a; 例子&#xff1a; 分析题目&#xff1a; 分析题目&#xff0c;因为是一个单链表所以不能找到尾后往前改变&#xff0c;所以不妨换个思路从前往后进行修改链表链接关系 用到三个指针 指针cur指向所要改变的节点链接关系、指针prev指向所要改变节点的前一个节点…

白盒测试入门概念

白盒测试的度量 根据待测产品的内部实现细节来设计测试用例白盒测试的执行手段是可以涵盖单元测试、集成测试使用代码覆盖率作为白盒测试的主要度量指标 代码覆盖率常见概念 语句覆盖&#xff1a;每行代码都要覆盖至少一次判定覆盖&#xff1a;判定表达式的真假至少覆盖一次…