D. Choosing Capital for Treeland

news2024/11/24 17:57:35

Problem - 219D - Codeforces

问题描述:Treeland国有 n 个城市, 这 n 个城市连接成了一棵树, 靠单向道路相连, 现在政府想要选择一个城市作为首都, 条件是首都必须能到达其他所有城市, 现在我们不得不将一些道路反转方向, 记反转的条数为 k 条, 我们要找到所有使 k 最小的首都.

思路:树形dp。找一个根,从根向下遍历,可以求出以u为根的节点到其所有子节点需要反转几次。之后在遍历,求出节点v到它的所有父亲节点需要反转几次。

建树

题目给的是单向边,但是对于反转来说不好处理,可以将其建成双向边。对于<u,v>而言,它的边权是0,<v,u>的边权是1。

    for(int i = 1; i < n; ++i) {
        int u,v; cin>>u>>v;
        g[u].push_back({v,0});
        g[v].push_back({u,1});
    }

dfs1, f1[]

f1[u]表示,以u为根的节点到其所有子节点需要反转的次数。
F 1 [ u ] = ∑ v ∈ u 的儿子节点 ( F 1 [ v ] + w ) F1[u] = \sum_{v \in {u的儿子节点}}(F1[v] + w) F1[u]=vu的儿子节点(F1[v]+w)

    auto dfs1 = [&](auto dfs1, int u, int fu) -> void {
        for(auto t: g[u]) {
            int y = t.vf, w = t.vs;
            if(y == fu) continue;
            dfs1(dfs1, y,u);
            f1[u] += f1[y] + w;
        }
    };

dfs2, f2[]

f2[v]表示,以v为根的节点到其所有的父亲节点和和兄弟节点及其子节点需要反转的次数,换言之,就是到除了v的子节点之外的所有节点需要反转的次数。

image-20230905105421994

可以发现,到v的祖先的反转次数是f2[u]再加上<v,u>的边权。到其兄弟节点及其兄弟节点的子节点是:u到其儿子节点的反转次数 - v到其儿子节点的反转次数。img
F 2 [ v ] = F 2 [ u ] + ! w + F 1 [ u ] − F 1 [ v ] − w F2[v] = F2[u] + !w + F1[u] - F1[v] - w F2[v]=F2[u]+!w+F1[u]F1[v]w

最小反转次数

最小反转次数就是:
m i n v ∈ 树的节点 ( F 1 [ v ] + F 2 [ v ] ) min_{v \in 树的节点}(F1[v] + F2[v]) minv树的节点(F1[v]+F2[v])

代码

void solve() {
    int n; cin>>n;
    vector<vector<PII>> g(n + 1);
    vector<int> f1(n + 1), f2(n + 1);
    for(int i = 1; i < n; ++i) {
        int u,v; cin>>u>>v;
        g[u].push_back({v,0});
        g[v].push_back({u,1});
    }
    auto dfs1 = [&](auto dfs1, int u, int fu) -> void {
        for(auto t: g[u]) {
            int y = t.vf, w = t.vs;
            if(y == fu) continue;
            dfs1(dfs1, y,u);
            f1[u] += f1[y] + w;
        }
    };
    dfs1(dfs1, 1, -1);
    auto dfs2 = [&](auto &&dfs2, int u, int fu) -> void {
        for(auto t: g[u]) {
            int y = t.vf, w = t.vs;
            if(y == fu) continue;
            f2[y] = f2[u] + !w + f1[u] - f1[y] - w;
            dfs2(dfs2, y,u);
        }
    };
    dfs2(dfs2,1,-1);
    int mi = INF;
    for(int i = 1; i <= n; ++i) mi = min(f1[i] + f2[i], mi);
    cout<<mi<<endl;
    for(int i = 1; i <= n; ++i) {
        if(mi == f1[i] + f2[i]) {
            cout<<i<<" ";
            // return ;
        }
    }
}

https://zhuanlan.zhihu.com/p/568881717

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

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

相关文章

c++day2---9.7

1> 思维导图 2> 封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员…

VMware的三种连接模式

目录 目录 前言 系列文章列表 思维导图 1&#xff0c;VMware是什么? 2&#xff0c;VMware的连接模式 2.1,VMware的连接模式是什么? 2.2, VMware的连接模式的分类 3&#xff0c;桥接模式 3.1,图示介绍 3.2,详细介绍 3.3,注意点 4.NAT模式 4.1,NAT协议 4.2,图示…

安科瑞精密配电多回路监控装置在轨道交通项目上的应用

安科瑞 崔丽洁 一、行业背景 轨道交通作为城市公共交通系统的一部分&#xff0c;在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步&#xff0c;轨道交通系统也在不断引入新的技术和创新&…

桉木板材的优缺点

桉木&#xff08;Eucalyptus&#xff09;是一种常见的木材品种&#xff0c;具有一些独特的特点和用途。以下是桉木板材的一些优点和缺点&#xff1a; 优点&#xff1a;强度高&#xff1a;桉木具有较高的密度和强度&#xff0c;使其在承重和结构应用中表现出色。它的强度比一些其…

HashMap核心方法:put()、putVal()、resize()与treeifyBin()

一、put方法 put方法的源码如下&#xff1a; 由此可见put的核心方法为putVal() putVal方法各参数值讲解&#xff1a; 前面三个参数不做过多讲解&#xff0c;第4个参数是控制是否要覆盖原来key中已经存在的值&#xff0c;比如HashMap的putIfAbsent方法调的也是putVal方法&…

Reinforcement Learning for Solving the Vehicle Routing Problem

Reinforcement Learning for Solving the Vehicle Routing Problem 一、背景二、模型三、公式 一、背景 本篇论文讨论一种有容量限制的版本CVRP&#xff0c;一辆有有限容量的车辆负责向地理分布的、需求有限的客户交付物品&#xff1b;当车辆的负载耗尽&#xff0c;它返回仓库…

MyBatis中一对一、一对多和多对多关联关系的配置详解

MyBatis中一对一、一对多和多对多关联关系的配置详解 引言一对一关联关系配置一对多关联关系配置结论 多对多关联关系配置结论 引言 MyBatis是一款优秀的持久层框架&#xff0c;它提供了灵活且强大的关联关系配置功能。本文将介绍MyBatis中一对一、一对多和多对多关联关系的配置…

SAP MTS案例教程AA固定资产后台配置

目录 本章介绍 2 AA通用后台配置 3 检查国家特殊的设置 3 创建折旧表 4 分配折旧表到公司代码 5 指定帐户确定 6 创建屏幕格式规则 7 定义号码范围间隔 8 定义资产分类 9 为资产类别分配总账科目 11 分配非税购置的进项税标识符 13 指定间隔和过帐规则 14 设置当前的折旧表 15…

使用Mybatis实现基本的增删改查------数据输入

创建一个空的Maven项目,删去src,用作存储pom的父项目 pom中存放下列依赖: <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><de…

系列二、Nginx简介

一、概述 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;处理高并发的能力十分强大&#xff0c;能够经受的住高负载的考验&#xff0c;有报告表明其能支持高达50000个并发连接数。 二、代理分类 2.1、正向代理 如果把局域网外的Internet想象成一个巨大的资源库&#x…

基于SSM的家居商城系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

算法-分治算法

文章来源&#xff1a; https://blog.csdn.net/weixin_45630258/article/details/126425400 欢迎各位大佬指点、三连 一、分治 1、定义&#xff1a;分治&#xff0c;也就是分而治之。 它的一般步骤是&#xff1a; ① 将原问题分解成若干个规模较小的子问题&#xff08;子问题…

【计算机网络】OSI七层网络模型概述及应用举例

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…

Hadoop分布式模式配置

hadoop环境准备&#xff1a; hadoop下载地址&#xff1a;http://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz hadoop集群的安装配置大致分为以下六个步骤&#xff1a; 选定一台机器作为master 在master节点上创建hadoop用户、安装ssh服务端、配…

春秋云镜 CVE-2016-0785

春秋云镜 CVE-2016-0785 S2-029 靶标介绍 2.3.28 之前的 Apache Struts 2.x 允许远程攻击者通过标签属性中的“%{}”序列执行任意代码。 启动场景 漏洞利用 工具利用 得到flag flag{a4c7fc9a-8e2d-49b8-9b09-22790fb2bfb6}

APO 载脂蛋白

Apolipoprotein E structure: insights into function-2006 Apolipoprotein E: Structural Insights and Links to Alzheimer Disease Pathogenesis APO-E 突变基因检测&#xff1b; APO-D, APO-M ; lipocalin ; APO-H CCP , 凝血诊断&#xff0c;狼疮抗凝物&#xff0…

Spring框架入门:构建你的第一个Web应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Matlab图像处理-多阈值分割

多阈值分割 在某些时候图像使用单独的阈值不能够对其实现有效地分割&#xff0c;例如在灰度直方图中有明显的三个峰时候&#xff0c;我们需要提取中间峰&#xff0c;这时我们使用双阈值分割会得到较好的分割效果。如下例子中生成灰度直方图中有两个峰&#xff0c;选择合适的两…

【strstr函数的介绍和模拟实现——超详细版】

strstr函数的介绍和模拟实现 strstr函数的介绍 资源来源于cplusplus网站 strstr函数声明&#xff1a; char *strstr( const char *str1, const char *str2 ); 它的作用其实就是&#xff1a; 在字符串str1中查找是否含有字符串str2&#xff0c;如果存在&#xff0c;返回str2在…

数据安全服务是什么意思?

数据安全服务是指为保护用户的数据免受未经授权的访问、修改、损坏或泄露的服务。随着信息化的发展&#xff0c;大量的个人和企业数据被存储在网络上&#xff0c;数据安全问题也日益受到关注。数据安全服务旨在帮助用户识别和应对各种潜在的数据安全风险&#xff0c;并提供相应…