Crystalfly(代码源div.1 P1)

开关电源辅助电源设计全流程拆解 地类型定义包含电路功率地(PGND)高压侧地,与主功率电路地相连整流桥负极、原边电感地、UC3842的功率地信号地(SGND)低压侧地,与控制/采样电路地相连副边整流管地、TL431地、MCU/运放地。 阅读详情

随便讲点

本来是想所有题目做完后一次性写一篇的,没想到div.1div.1div.1那么狠,很多题虽然知道思路但总是AAA不了,总而言之还是自己太菜了。

这题是南京站的铜牌题,赛场上面感觉自己差点写出来,后来看一下其实还是有点差距的,如果当时能再多给我一个小时调代码还是有可能的。或许是因为赛场上面花了太多的时间和精力,后来补这题时候多少有点心理阴影,写了很久都写不出来。

题意

给你一棵树,这棵树上面有很多个节点,每个节点上面有很多蝴蝶,当你走到一个节点时候你将立即获得这个节点上面所有的蝴蝶,但另一方面来说,当你走到一个节点时候周围的蝴蝶将在t[i](t[i]<=3)t[i](t[i]<=3)t[i](t[i]<=3)的时间内消失。请问最多能够抓到多少蝴蝶?

题解

首先明确一些简单的定理:

  1. 当t[i]==3t[i]==3t[i]==3时候,我们到达一个点的父节点的时候我们还可以先去一次它的兄弟节点,然后再去它
  2. 当t[i]==1t[i]==1t[i]==1和t[i]==2t[i]==2t[i]==2本质相同,都只能直接向下走。

接下来是全部的分析过程

先设定两个数组sum[],f[]sum[],f[]sum[],f[],分别代表当前节点所有子节点的fff值之和以及当前子树根节点消散但子节点没有消散的情况下能够获得的最大权值。

当我们走到一个节点时候我们有两种策略

  • 直接向下走

    这种情况相对简单,直接给出公式f[x]=max(sum[x]+w[son])f[x]=max(sum[x]+w[son])f[x]=max(sum[x]+w[son])。

  • 先试探一个子节点然后进入一个t[x]==3t[x]==3t[x]==3的节点

    先给出公式f[x]=max(sum[x]−f[son1]+w[son1]+sum[son1]+w[son2])f[x]=max(sum[x]-f[son1]+w[son1]+sum[son1]+w[son2])f[x]=max(sum[x]−f[son1]+w[son1]+sum[son1]+w[son2])其中t[son2]==3,son1!=son2t[son2]==3,son1!=son2t[son2]==3,son1!=son2。

    sum[x]sum[x]sum[x]:我们不同多解释;

    −f[son1]+w[son1]+sum[son1]-f[son1]+w[son1]+sum[son1]−f[son1]+w[son1]+sum[son1]:被我们尝试进入son1son1son1然后我们取了它的权值惊动了它的子节点。

    w[son2]w[son2]w[son2]:我们尝试进入son2son2son2并接着往下走。

    但是很明显的是,这样做无疑是会时间超限的,因为我们枚举了两个不同的节点,时间复杂度可能会被卡到O(n2)O(n^2)O(n2)。

    为了优化算法,我们可以选择,求出w[son2]w[son2]w[son2]的最大值和次大值,然后枚举son1son1son1,当son1==son2maxson1==son2_{max}son1==son2max​时候我们选择使用次大值作为w[son2]w[son2]w[son2]。

const int N=1e5+10;
vector<vector<int>> tree;
int sum[N],f[N];
int w[N],t[N],n;
void INIT(){
    tree.clear();
    for(int i=0;i<=n+5;i++) sum[i]=f[i]=0;
    return;
}
void dfs(int fa,int x){
    int maxi1=-inf,maxi2=-inf;
    int maxid1=0,maxid2=0;
    for(auto v:tree[x]){
        if(v==fa) continue;
        dfs(x,v);
        sum[x]+=f[v];
        if(t[v]==3) if(w[v]>=maxi1) maxi2=maxi1,maxi1=w[v],maxid2=maxid1,maxid1=v;
        else if(w[v]>maxi2) maxi2=w[v],maxid2=v;
    }
    for(auto v:tree[x]){
        if(v==fa) continue;
        f[x]=max(f[x],sum[x]+w[v]);
        if(v==maxid1) f[x]=max(f[x],sum[x]-f[v]+w[v]+sum[v]+maxi2);
        else f[x]=max(f[x],sum[x]-f[v]+w[v]+sum[v]+maxi1);
    }
    return ;
}
void MAIN(){
    cin>>n;
    tree.resize(n+1);
    for(int i=1;i<=n;i++) cin>>w[i];
    for(int i=1;i<=n;i++) cin>>t[i];
    for(int i=1,u,v;i<n&&cin>>u>>v;i++) tree[u].push_back(v),tree[v].push_back(u);
    dfs(-1,1);
    cout<<(f[1]+w[1])<<endl;
    return ;
}
AC main(){
#ifdef DEBUG
    freopen("/Users/chenzhiyuan/Desktop/ACM/ACM/in.txt", "r", stdin);
    freopen("/Users/chenzhiyuan/Desktop/ACM/ACM/out.txt", "w", stdout);
    unsigned long start=clock();
#endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    INI();
    int _=1;
    cin>>_;
    while(_--){
        INIT();
        MAIN();
    }
#ifdef DEBUG
    unsigned long end=clock();
    cout<<(end-start)/1000<<"ms"<<endl;
#endif
    return 0;
}
学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模 本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实 阅读详情

相关推荐

跨时钟域传输数据——单bit和多bit信号(总结)

总结单bit和多bit信号的跨时钟域传输

qq_42135020的博客 1万+

Crystalfly 简单树形DP

题意 一颗树,在边上移动的时间花费为1。每个点有两个权aaa和ttt,aaa是一个只能被获取一次的点权,ttt代表当第一次进入这个点的相邻点后多久,这个点的第一个权aaa会消失。ttt的取值范围为111到333.现在你从111号点开始,任意游走,请问最大能获得的aaa是多少。 思路 需要特殊关注的是ttt的范围,一到三。假如我们任意跑到了一个点,那么他的子节点会立即开始计时。假如有若干个子树。我有如下两种抉择:走到其中一棵子树vvv,之后一路获取vvv子树的权,最后再去别的子树。第二种是我先前往vvv,之后

TheSunspot的博客 857

步进电机励磁模式

1. 励磁模式 步进电机的基本操作模式称为 励磁模式,能够使步进电机工作在全步模式,半步模式和微步模式,其中微步模式能够有效的降低步进电机相电流的噪声,能够改善步进电机固有的噪声震动问题。下面将介绍 3 种励磁模式。 2. 全步励磁模式 所谓全步模式,就是依据电机固有结构设计固定的步距角工作,一个电脉冲,步进电机前进一个步距角。这个步距角使电机设计结构所决定的,也可以理解为电机以最大的步距角旋转。 3. 半步励磁模式 半步模式是以电机固有的结构决定的步距角的一半角度进行步进旋转。如下图所示,步进

zhbi98 的技术 Blogs 5550

2021 ICPC 南京 H-Crystalfly(树上DP)

2021 ICPC 南京 H-Crystalfly(树上DP) Probelm Statement 你一开始处于111号节点的树, 每个点aia_iai​个蝴蝶, 且如果ithi^{th}ith节点的父节点被扰动时, 这些蝴蝶会在ti(1≤ti≤3)t_i(1\leq t_i\leq 3)ti​(1≤ti​≤3)时刻后消散. 求你可以抓到多少只蝴蝶. Solution 当我们第一次到达节点uuu的时候它的所有儿子都会被激活,对于uuu的子节点vvv, 我们只有两个决策, 要么到达子节点vvv知乎继续向下,

LH_Frank的博客 1475

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

用沸腾的热血,支付我们的人生吧! 2万+

别再手动调参了!用Optuna+PyTorch搞定Transformer时序预测超参数(附完整代码)

本文详细介绍了如何利用Optuna和PyTorch实现Transformer时序预测模型的自动化超参数调优。通过贝叶斯优化技术,显著提升单变量时序预测的效率和准确性,并附有完整代码实现。文章涵盖模型架构设计、数据预处理、Optuna调参实战及生产环境部署建议,为开发者提供一站式解决方案。

weixin_33704234的博客 578

P9847 [ICPC2021 Nanjing R] Crystalfly 题解 (SPJ)

烦人的绿题。

达瓦里希,这里禁喵。 1368

如何将TDengine集成到Thingsboard?

1 概述 ThingsBoard是用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议MQTT、CoAP和HTTP实现设备连接,并支持云和本地部署。 ThingsBoard迄今没有导入专业的时序数据库应用,用户可选择的只有PostgreSQL和Cassandra。虽然针对PostgreSQL引入了TimeScale插件,但由于其不是按照宽表的方式组织数据记录,TimeScale的优势根本发挥不出来。总之,这两种数据库不具备高效的数据吞吐能力。 而且,Thingsboard在

Wearable_device的博客 4767

[树形dp]Crystalfly 2021年ICPC南京站H

之后遍历树一遍,自底向上更新dp值。如果当前点存在3秒点,那么可以先遍历第一步向哪个子节点走,最后所有情况取最大值,当确定第一步走到哪个子节点后,第二步肯定要返回父节点,第三步选择哪个3秒点其实也是固定的,肯定选择具有最大点权的那个3秒点,这里把不同3秒点的贡献列出来就很容易发现了。给出一棵有n个点的树,树上每点权值为ai,每个点还有一个暂存时间ti,当走到某点i时,其所有相邻结点开始计时,当时间达到相邻点的暂存时间后,相邻点的权值就会消失变成0,问从点1出发,能够获得的最大权值。

Cloth的博客 688

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 872

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

2021南京站 铜牌题 H - Crystalfly

如果只有1、2,没有3的话,我们就只用一个dp[u],表示不选当前节点的值时能得到的最大值。写这么麻烦,因为此时不能用g[v]表示v的转移了,因为选完v再去v2不能选v的所有结点,应该用sum,这也就是。大概1点半做到5点不到,大概三个多小时,做了三道题,卡了一个多小时的H,而且罚时多,看来要拿铜还要多努力。如果我按平常的g[u]表示到当前节点(不管选不选)的最大值,发现转移需要子节点中拿一个上去,显然转移不了。之后我们需要用set的有序功能,找到最大的a[v2](这样才能遍历的时候获得最大值)。

fanshui682的博客 614

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

H. Crystalfly(2021ICPC-南京)(树状dp)

The 2021 ICPC Asia Nanjing Regional Contest 参考题解 比赛题解 Solution Code const int N = 2e5 + 5; ll sum[N], f[N], a[N], t[N]; vector<int> v[N]; void dfs(int x, int fa) { multiset<ll>s;//set中根节点是集合最小值 ll maxn = 0; for (int y : v[x]) { if (y ==

QQ2530063577的博客 1248

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

The 2021 ICPC Asia Nanjing Regional Contest H.Crystalfly(树上DP)

cjb的题解 有一个容易被忘记的坑点: 在我们锁定最大点w,然后对其他点进行第二种决策的计算时,要记得还要反过来拿其他店对w点进行一轮第二种决策的计算!!! 还有别忘了if(i==fa)continue!!! 另外vector里的pair的second是没有用的,可以忽略 #include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; int n; const int N = 1e5 +.

fdxgcw的博客 1243

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ICPC Nanjing 2021 H, Crystalfly

#include<bits/stdc++.h> using namespace std; #define ll long long inline char gc() { static char buf[1000000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++; } #define gc getchar inline ll re

qq_51379351的博客 538

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2021icpc南京 H. Crystalfly

题意:有一棵树,每一个节点都有一个值val[i]表示这个点有多少只晶蝶,t[i]表示假设你到达该点连接的点之后,经过多少秒该点的晶蝶都会跑光(从一个点到另一个点花费时间为1).问最多可以抓多少晶蝶。f[x][1]=max(f[x][0]+val[y],f[x][1]),意为假设该节点的子节。temp=f[y][0]-f[y][1]+val[y]的最大值(j表示拐弯后往下那个点,y表。f[x][0]的计算方法很简单,直接Σ(f[j][1]-val[j])即可,意为我们取。弯回到这个j点往下走的情况.

qq_49593247的博客 770

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 267

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 324

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 305

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 599

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 144

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 23

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 358

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 172

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 416
上一篇: 数数(代码源打卡day.6)
下一篇: 2021浙江省赛
ChikingChen
博客等级 码龄6年 18粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值