当前位置: 首页 > news >正文

HDU 4607 树的直径

题意:每条边的长度是1,求访问k个节点,最少走多远。

分析:贪心,首先走直径len,走完直径len+1个点后,走剩下的点(k-len-1),而走这些点最少一定为(k-len-1)*2。

证明:反证法,要是比(k-len-1)*2还短,那么之前的直径len,就不是直径了。

#include <bits/stdc++.h>

using namespace std;

const int maxn = 100000+5;

struct Edge {
    int v,c;
};

vector<Edge> G[maxn];

int len;
int tmp;
void dfs(int x,int fa,int dep) {
    if(dep>len) {
        tmp = x;
        len = dep;
    }
    for(int i=0;i<G[x].size();i++) {
        int v = G[x][i].v;
        int c = G[x][i].c;
        if(v==fa) continue;
        dfs(v,x,dep+c);
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--) {
    
        int n,m;
        scanf("%d%d",&n,&m);

        for(int i=0;i<=n;i++)
            G[i].clear();
        
        for(int i=0;i<n-1;i++) {
            int u,v;
            scanf("%d%d",&u,&v);
            G[u].push_back((Edge){v,1});
            G[v].push_back((Edge){u,1});
        }

        len = -1;
        dfs(1,-1,0);
        int st = tmp;
        len = -1;
        dfs(st,-1,0);
        while(m--) {
            int k;
            scanf("%d",&k);
            if(k<=len+1)
                printf("%d\n",k-1);
            else {
                printf("%d\n",len+(k-len-1)*2);
            }
        }

    }

    return 0;
}

 

转载于:https://www.cnblogs.com/TreeDream/p/7261486.html

相关文章:

  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
  • Oracle日志查看
  • Oracle查询最近执行过的SQL语句
  • 统一设备模型(1)——bus、subsys_interface、class、class_interface分析
  • IIS7.5 错误代码0x8007007e HTTP 错误 500.19 - Internal Server Error
  • 竖排主菜单鼠标滑动角度判断显示子分类
  • [NOIP2015] 运输计划
  • 【搜索】POJ-3669 BFS
  • Django model字段类型参考列表
  • 拓扑排序的原理及其实现
  • oracle11g 在azure云中使用rman进行实例迁移
  • Python三种排序算法
  • 最纯粹的直播技术实战02-Camera的处理以及推流
  • 一、MyBatis基本用法——3-Mapper XML映射文件
  • @Autowired和@Resource装配
  • 「译」Node.js Streams 基础
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Date型的使用
  • golang中接口赋值与方法集
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript设计模式之工厂模式
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • React+TypeScript入门
  • Twitter赢在开放,三年创造奇迹
  • 成为一名优秀的Developer的书单
  • 动态规划入门(以爬楼梯为例)
  • 关于字符编码你应该知道的事情
  • 基于axios的vue插件,让http请求更简单
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 思考 CSS 架构
  • 一、python与pycharm的安装
  • ​MySQL主从复制一致性检测
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #LLM入门|Prompt#3.3_存储_Memory
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五)MySQL的备份及恢复
  • .gitignore文件—git忽略文件
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net mvc 获取url中controller和action
  • .net6使用Sejil可视化日志
  • .NET命令行(CLI)常用命令
  • :O)修改linux硬件时间
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [codeforces]Levko and Permutation