noi.ac #543 商店

5d2589a103cfb29990.png
5d2589a103f4095056.png

我们考虑可并堆维护,从深到浅贪心选取。

用priority_queue启发式合并的话,是60pts:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<ctime>
#define MAXN 3000010
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=getchar();}return x*f;
}
int n,m,t,tot;
int head[MAXN],id[MAXN],fa[MAXN],c[MAXN];
long long ans;
struct Edge{int nxt,to;}edge[MAXN<<1];
priority_queue<int,vector<int>,less<int> >q[MAXN];
inline void add(int from,int to)
{edge[++t].nxt=head[from],edge[t].to=to;head[from]=t;
}
inline void solve(int x,int pre)
{id[x]=++tot;q[tot].push(x-1);for(int i=head[x];i;i=edge[i].nxt){int v=edge[i].to;if(v==pre) continue;solve(v,x);if(q[id[x]].size()<q[id[v]].size()) swap(id[x],id[v]);while(!q[id[v]].empty()){int cur=q[id[v]].top();q[id[v]].pop();q[id[x]].push(cur);}}for(int i=1;i<=c[x];i++){ans+=q[id[x]].top();q[id[x]].pop();if(q[id[x]].empty()) break;}
}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifn=read(),m=read();for(int i=2;i<=n;i++) {fa[i]=read();fa[i]++;add(fa[i],i),add(i,fa[i]);}for(int i=1;i<=m;i++){int x;x=read();x++;c[x]++;}solve(1,0);printf("%lld\n",ans);return 0;
}

用并查集维护的话,可以AC:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define MAXN 3000010
int n,m,num;
int cnt[MAXN],fa[MAXN],f[MAXN];
long long ans=0;
inline int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifscanf("%d%d",&n,&m);for(int i=2;i<=n;i++) scanf("%d",&fa[i]),fa[i]++;for(int i=1;i<=m;i++){int x;scanf("%d",&x),x++;cnt[x]++;}for(int i=1;i<=n;i++) f[i]=(cnt[i]?i:fa[i]);for(int i=n;i>=1;i--){int x=find(i);if(cnt[x]){ans+=i-1;cnt[x]--;if(cnt[x]==0) f[x]=find(fa[x]);}}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/fengxunling/p/11163903.html

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

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

相关文章

软件设计师--文件索引

问题&#xff08;题目&#xff09;如下图所示&#xff1a;这道题最中要的是理解什么是直接索引、一级间接索引、二级间接索引&#xff1a; 直接索引&#xff1a;地址项直接指向文件块 一级间接索引&#xff1a;地址项&#xff08;一层&#xff09;指向存放地址项&#xff08;二…

Floyd算法及其应用

Part I-Introduction Floyd算法是一种求图上多源最短路径的算法&#xff0c;适用于中小规模的图&#xff0c;思维简单易懂。 Floyd算法的实质是&#xff08;区间&#xff09;动态规划&#xff0c;在这里做一个简单的概述。 对于一个有\(n\)个结点的图&#xff0c; 令\(dis[i][j…

软件设计师--最早开始时间和最晚开始时间

题目如图所示&#xff0c;解法如下&#xff1a; 方法&#xff1a; 先求最早开始时间&#xff1a;A是开始节点&#xff0c;所以A的最早开始时间是0&#xff0c;并且最早开始时间等于最晚开始时间。等得到图中红色的部分。 其他节点的最早开始时间为以该节点作为弧头的所有有向…

软件设计师 --哈夫曼树的一个经典问题

题目如下&#xff1a;有很多人反应&#xff0c;他们怎么做都做不出正确的答案&#xff0c;结果发过他们画的哈夫曼树的图以后&#xff0c;发现图完全是错误的&#xff1b; 如下图所示&#xff1a;为什么错误的&#xff0c;因为在遇到有两个权重为17的树的时候&#xff0c;没有遵…

mini2440烧写nor flash

1. 安装Setup_JLinkARM_V440.exe 2. 打开JLINK ARM 3. File->Open Project&#xff0c;打开 s3c2440a_embedclub.jflash4. Options->Project settings... 选择 Flash&#xff0c;点击 Select flash device&#xff0c;选中开发板对应的 Nor Flash 芯片型号。比 如 S29AL0…

软件设计师--判定覆盖,判定条件覆盖,条件组合覆盖--一个栗子

针对上图的一个判断条件&#xff0c;在这里将分别讨论判定覆盖、判定条件覆盖、条件组合覆盖的情况&#xff1a; 设T1A>3,T2B>3;为该判定节点的两个子条件。 (一&#xff09;判定覆盖&#xff1a; 所谓的判定覆盖就是让判定的真分支和假分支各执行一次&#xff0c;只要…

python3 多继承搜索__init__方法的两种策略

继承情形一&#xff1a;测试代码如下&#xff1a; class A(object):def __init__(self):print(A)class B(object):def __init__(self):print(B)class C(A):def __init__(self):print(C)class D(B): def __init__(self):print(D)class E(C, D):pass执行当前代码 xE()&#xff0c…

Unity Shader 屏幕后效果——Bloom外发光

Bloom的原理很简单&#xff0c;主要是提取渲染图像中的亮部区域&#xff0c;并对亮部区域进行模糊处理&#xff0c;再与原始图像混合而成。 一般对亮部进行模糊处理的部分采用高斯模糊&#xff0c;关于高斯模糊&#xff0c;详见之前的另一篇博客&#xff1a; https://www.cnblo…

不要假装努力,结果不会陪你演戏!

转载于:https://www.cnblogs.com/strive-19970713/p/11171205.html

机器学习基石-作业二-第10题分析

题目如上图所示&#xff0c;答案是&#xff1a;&#xff1b;在网上看到的答案中有一个很好的解释就是说在一个n纬的欧几里德空间里&#xff0c;分别按照参数做一个垂直于每个轴的超平面&#xff0c;这些超平面能够打散这么多个点。首先我承认这个事实&#xff0c;具体的证明还没…

机器学习基石作业二中的DECISION_STUMP实现

概要&#xff1a;在林老的题目描述中&#xff0c;DECISION_STUMP&#xff08;其实就是“决策桩”&#xff0c;也就是只有一层的决策树&#xff09;。题目中提到了的选去是把属性&#xff08;一维的&#xff09;按照从小到大的顺序排列以后取两个挨着的值的平均值&#xff0c;网…

【MM系列】SAP 关于更改物料的价格控制类型

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【MM系列】SAP 关于更改物料的价格控制类型前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&#xff0c;阅读更舒适…

机器学习基石-作业三-第2题分析以及通过H证明EIN的讨论

题目&#xff1a; 这是机器学习基石作业三种的第二小题&#xff0c;额&#xff0c;在网上看了很多解答&#xff08;解答也不多&#xff09;感觉都没有说清楚为什么&#xff0c;所以励志清楚滴解决一下这个问题&#xff0c;经过努力&#xff0c;自认为得到了详细的解答&#xff…

Nginx的平滑升级记录---适用于编译安装的Nginx

一、查看自己的Nginx的版本号 [rootlocalhost sbin]# cd /usr/local/nginx/sbin/ [rootlocalhost sbin]# ls nginx [rootlocalhost sbin]# ./nginx -V nginx version: nginx/1.15.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: 二、确定自己要…

02(c)多元无约束优化问题-牛顿法

此部分内容接《02(a)多元无约束优化问题》&#xff01; 第二类&#xff1a;牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}\mathbf{\delta })\text{ }\approx \text{ }f({{\mathbf{x}}_{k}}){{\nabla }^{T}}f({{\mathbf{x}}_{k}})\cdot \mathbf{\delta }\frac{1}{2}{{\mathbf{\…

推荐系统浅浅的例子

对于推荐系统&#xff0c;有很多的很强大的算法。这里作为练习&#xff0c;只介绍基本的协同过滤算法&#xff08;userbased&#xff09;和FM&#xff08;通过梯度下降的角度&#xff0c;还可以通过交替优化的角度来看&#xff09;。 这里的例子是在七月算法的视频中看的&#…

TPL Dataflow .Net 数据流组件,了解一下?

回顾上文 作为单体程序&#xff0c;依赖的第三方服务虽不多&#xff0c;但是2C的程序还是有不少内容可讲&#xff1b; 作为一个常规互联网系统&#xff0c;无外乎就是接受请求、处理请求&#xff0c;输出响应。 由于业务渐渐增长&#xff0c;数据处理的过程会越来越复杂和冗长&…

推荐系统实例

协同过滤与隐语义模型 在机器学习问题中&#xff0c;我们见到的数据集通常是如下的格式&#xff1a; input target ... ... &#xff0c;一个输入向量的集合以及对应的数据集合,就是我们想要去预测的值。 对于…