首页 > 其他分享 >1873H Mad City

1873H Mad City

时间:2023-09-22 14:13:50浏览次数:31  
标签:City 结点 return int Marcel vis Mad 1873H Valeriu

基环树上的“追及相遇”问题。

考虑什么情况下,Valeriu 能“无限期”地从 Marcel 手中逃离。参考样例 1,我们发现当 Valeriu 进入基环树的环中,他总能通过预判,逃往 Marcel 的反方向,避免被抓;而如果两者都在子树中,Marcel 就能步步紧逼,将 Valeriu 堵在叶子结点上——因此,Valeriu 要尽快到达环上,而 Marcel 要赶在 Valeriu 之前堵在他从子树进入环的结点上。

做法是显然的:第一遍 dfs 找到 Valeriu 从哪个点进入环;第二遍 dfs 从 \(a\) 出发,计算 Marcel 到达目标点的距离;第三遍计算 Valeriu 到目标点的距离,两者比大小。

如何找到目标点:以 \(b\) 为根遍历基环树,\(vis\) 数组记录结点的访问情况,对于到达的结点 \(u\),如果有 \(v\) 已经访问过,但又不是 \(fa_u\),则 \(u\) 即为所求点。

复习基环树找环:dfs 同时再维护各个点的父亲信息,找到环中一点 \(u\) 后(方法同上),原路返回到 \(v\),退回路径上的点都在环上。

下面是 AC 代码(只保留两个 dfs):

vector<vector<int>> g;
vector<int> vis;
int st;

bool dfs1(int x, int fa) {
    vis[x] = true;
    for (int y : g[x]) {
        if (y == fa) {
            continue;
        }
        if (vis[y]) { // 不是父亲结点,但却访问过——有环
            st = y;
            return true;
        }
        if (dfs1(y, x)) { // 找到目标结点,不再遍历,直接返回
            return true;
        }
    }
    return false;
}

int dfs2(int x) {
    vis[x] = true;
    int res = 0x3f3f3f3f;
    for (int y : g[x]) {
        if (vis[y]) {
            continue;
        }
        if (y == st) {
            return 1;
        }
        int dis = dfs2(y) + 1;
        res = min(dis, res);
    }
    return res;
}

THE END

标签:City,结点,return,int,Marcel,vis,Mad,1873H,Valeriu
From: https://www.cnblogs.com/th19/p/17722162.html

相关文章

  • 使用json.dump(citys_data, f, ensure_ascii=False)写文件的时候,如果要写入汉字,则要指
    这个代码例子为获取链家网里所有的城市,然后将按照{省名:{市名:url},{市名:url}....}的方式importrequestsfromlxmlimportetreeimportjsondefget_all_city():url="https://www.lianjia.com/city/"#全国城市列表headers={'User-Agent':'Mozill......
  • Nomad系列-Nomad网络模式
    系列文章Nomad系列文章概述Nomad的网络和Docker的也有很大不同,和K8s的有很大不同.另外,Nomad不同版本(Nomad1.3版本前后)或是否集成Consul及CNI等不同组件也会导致网络模式各不相同.本文详细梳理一下Nomad的主要几种网络模式在Nomad1.3发布之前,它自身......
  • Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
    系列文章Nomad系列文章Traefik系列文章Tailscale系列文章概述终于到了令人启动的环节了:Nomad+Traefik+Tailscale集成实现零信任安全。在这里:Nomad负责容器调度;(容器编排工具)Traefik负责入口流量;(Ingress工具)Tailscale实现跨地域联通,4层加密以及提供HTTPS证书......
  • Nomad 系列-Nomad 挂载存储卷
    系列文章Nomad系列文章概述显然,如果Nomad要运行有状态存储,那么挂载存储卷就是必备功能。Nomad允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中:容器存储接口(CSI)插件Nomad主机卷支持DockerVolume驱动程序默认没有安装CSI的情况下,主要使用的......
  • Nomad 系列-安装
    系列文章Nomad系列文章Nomad简介开新坑!近期算是把自己的家庭实验室环境初步搞好了,终于可以开始进入正题研究了。首先开始的是HashiCorpNomad系列,欢迎阅读。关于Nomad的简介,之前在大规模IoT边缘容器集群管理的几种架构-2-HashiCorp解决方案Nomad有提到过,这里再......
  • 无涯教程-JavaScript - GAMMADIST函数
    GAMMADIST函数取代了Excel2010中的GAMMA.DIST函数。描述该函数返回伽马分布。您可以使用此功能来研究可能具有偏斜分布的变量。伽马分布通常用于排队分析。语法GAMMADIST(x,alpha,beta,cumulative)争论Argument描述Required/OptionalXThevalueatwhichyouwantt......
  • Cityscapes怎么做!DeepLabv3参见!
    项目场景:问题描述:使用计算机视觉技术和英特尔®AI分析工具套件为自动驾驶车辆开发实时对象检测模型。参赛团队需要创建一个深度学习模型,用于准确检测行人、车辆、交通标志和交通信号等对象。该模型需要具有高准确度和低延迟,能够满足自动驾驶车辆安全导航的需求。预期解决方案::使......
  • ArrayList源码阅读之EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA区别
    /***Sharedemptyarrayinstanceusedforemptyinstances.*/privatestaticfinalObject[]EMPTY_ELEMENTDATA={};/***Sharedemptyarrayinstanceusedfordefaultsizedemptyinstances.We*distinguishthisfromEMPTY_ELEMENTDATAtoknowhowmuchtoi......
  • Karmada 结合 coreDNS 插件实现跨集群统一域名访问
    本文分享自华为云社区《Karmada结合coreDNS插件实现跨集群统一域名访问》,作者:云容器大未来。在多云与混合云越来越成为企业标配的今天,服务的部署和访问往往不在一个K8s集群中。如何做到服务访问与集群无关,成为了各个云服务提供商必须要面对的问题。本文基于Karmadav1.6.1版......
  • 高德解析城市的分析,根据高德的经纬度获取城市cityCode
    高德解析城市的分析,根据高德的经纬度获取城市cityCodehttp://restapi.amap.com/v3/geocode/regeo?output=json&location=110.517039,18.817948&key=替换成自己的高德KEY&extensions=base1.高德返回城市(正常情况)江苏省南京市玄武区"city":"南京市","province":"江苏省",&qu......