首页 > 其他分享 >P3523 POI2011 DYN-Dynamite

P3523 POI2011 DYN-Dynamite

时间:2024-07-07 13:09:50浏览次数:15  
标签:int max POI2011 mid tot DYN maxn Dynamite dis

P3523 POI2011 DYN-Dynamite

小 trick,加双倍经验。

思路

使 \(dis\) 的最大值最小,可以想到二分 \(dis\),然后根据 \(dis\) 判断可行性。

那么可以把问题转化为,所有关键点到选择的点的距离小于 \(dis\) 的前提下,使得使用的点的个数最小。

这就是:P3942 将军令

考虑设 \(f[u]\) 为距离 \(u\) 最近的选中的点的距离,\(g[u]\) 为距离 \(u\) 最远的未被覆盖的关键点的距离。

这里覆盖指:对于一个关键点,到最近的被选中点的距离小于等于当前二分的 \(dis\)。

有朴素转移:

\[f[u]=\max(f[u],f[v]+1)\\ g[u]=\max(g[u],g[v]+1) \]

然后要分讨一下(下文中的 \(mid\) 为二分的距离):

  1. 当 \(f[u]>mid\) 且 \(u\) 为关键点。

    \(g[u]=max(g[u],0)\)。

    解释:显而易见,当前点可以作为一个没有被覆盖的关键点。

  2. 当 \(g[u]+f[u]\leq mid\)。​

    \(g[u]=-\infty\)。

    解释:显然没有一个没被覆盖的关键点,易证 \(g[u]\) 和 \(f[u]\) 不来自一棵子树。

  3. 当 \(g[u]=mid\)。

    \(g[u]=-\infty,f[u]=0\)​ 且需选择的点个数加一。

    解释:该点必须被选择。

最后判断一下根的 \(g[u]\) 是否大于 \(0\),如果大于 \(0\) 在加一个选中的点。

然后套上二分就 OK 了。

CODE

#include<bits/stdc++.h>
using namespace std;

const int maxn=3e5+5;

struct Edge
{
    int tot;
    int head[maxn];
    struct edgenode{int to,nxt;}edge[maxn*2];
    inline void add(int x,int y)
    {
        tot++;
        edge[tot].to=y;
        edge[tot].nxt=head[x];
        head[x]=tot;
    }
}T;

int n,m;
int a[maxn];

int g[maxn],f[maxn];

int gs;
inline void dfs(int u,int fa,int mid)
{
    g[u]=-1e9,f[u]=1e9;
    for(int i=T.head[u];i;i=T.edge[i].nxt)
    {
        int v=T.edge[i].to;
        if(v==fa) continue;
        dfs(v,u,mid);
        f[u]=min(f[v]+1,f[u]);
        g[u]=max(g[v]+1,g[u]);
    }
    if(f[u]>mid&&a[u]) g[u]=max(g[u],0);
    if(f[u]+g[u]<=mid) g[u]=-1e9;
    if(g[u]==mid) f[u]=0,g[u]=-1e9,gs++;
}
inline void solve(int mid)
{
    gs=0;
    dfs(1,0,mid);
    gs+=(g[1]>=0);
    printf("%d",gs);
}

int main()
{
    int t;
    scanf("%d%d%d",&n,&m,&t);
    for(int i=1;i<=n;i++) a[i]=1;
    for(int i=1;i<n;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        T.add(u,v),T.add(v,u);
    }
    solve(m);
}

标签:int,max,POI2011,mid,tot,DYN,maxn,Dynamite,dis
From: https://www.cnblogs.com/binbinbjl/p/18288389

相关文章

  • 【0293】Postgres内核之创建 dynahash table 解惑
    相关文章:【0291】Postgres内核之dynahashtable创建0.dynahashtable创建细节在【0291】Postgres内核之dynahashtable创建一文中详细讲解过Postgres内核创建一个dynamichashtable的源码实现。后台收到读者私信,说是有一些实现细节不太清楚。为了更直观地让读者......
  • 【0294】Postgres内核 dynahash 之 hash_search 实现原理
    相关文章:【0289】Postgres内核之哈希表(HashTables)【0290】Postgres内核之dynahash(动态哈希表,dynamichashtables)(概念篇)【0291】Postgres内核之dynahashtable创建【0292】Postgres内核源码之dynahash插入entry实现【0293】Postgres内核之创建dynahashtable解惑......
  • Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户
    目录什么是AOP?.NetCore中有哪些AOP框架?基于CastleDynamicProxy实现AOPIOC中使用CastleDynamicProxy实现事务管理实现用户自动填充什么是AOP?AOP(Aspect-OrientedProgramming,面向切面编程)是一种编程范式,旨在通过将横切关注点(cross-cuttingconcerns)从主要业务逻辑......
  • Dynamixel XL330 XL430 Robotics的低成本机械臂
    原文链接:GitHub-AlexanderKoch-Koch/low_cost_robot 该存储库包含用于构建和低成本机械臂的文件。你也可以建造第二个机械臂(引导臂)来控制另一个臂(跟随臂)。领导者的设计灵感来自GELLO项目,但建造起来更简单。这样的机械臂非常适合机器人学习,其中两只机械手臂也能折叠衣服。 ......
  • Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读
    论文笔记资料1.代码地址https://github.com/BIT-DA/RoTTA2.论文地址https://arxiv.org/abs/2303.138993.数据集地址comingsoon1论文摘要的翻译测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在简单的......
  • 查询 dynamic crm 中,TypeCode 对应的实体名称
    查询语句:selectEntityId,Name,ObjectTypeCode,OriginalLocalizedNamefromEntityVieworderbyObjectTypeCode常用列表:NameObjectTypeCodeAccount1Contact2Opportunity3Lead4Annotation5BusinessUnitMap6Ow......
  • YOLOv10全网最新创新点改进系列:YOLOv10+ICCV 2023 - 动态蛇形卷积(Dynamic Snake Convo
    YOLOv10全网最新创新点改进系列:YOLOv10+ICCV2023-动态蛇形卷积(DynamicSnakeConvolution)采用管状结构,拉升模型小目标、遮挡目标检测效果!所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合上千万种!改进不重样!!专注A......
  • 论文学习_Nebula: Self-Attention for Dynamic Malware Analysis
    论文名称发表时间发表期刊期刊等级研究单位Nebula:Self-AttentionforDynamicMalwareAnalysis2024年IEEETIFSCCFA热那亚大学1.引言研究背景与现存问题:动态恶意软件分析是一项至关重要的任务,不仅对于检测而且对于了解整个互联网上广泛传播的威胁而言......
  • DWA(Dynamic Window Approach)局部路径规划算法详解及代码实现
    DWA(Dynamic Window Approach)局部路径规划算法详解及代码实现二、算法原理一句话概况,就是假定机器人当前以若干组容许范围内的速度(差速轮为例:线速度V,角速度W)进行移动,并对这若干组速度进行轨迹计算,得到若干组轨迹,再根据若干条评分机制选择最好的轨迹所对应的速度作为dwa输......
  • OPenFast中AeroDyn,ElastoDyn,ElastoDyn_Tower,ServoDyn的作用!
    在OpenFAST中,这四个文件分别有不同的作用,它们用于定义风力涡轮机不同部分的特性和行为。以下是每个文件的总结及其作用:NRELOffshrBsline5MW_Onshore_AeroDyn15.dat作用:这是AeroDyn模块的输入文件,用于定义风力涡轮机的空气动力学特性。内容:包括风力涡轮机叶片的空气动力......