Codeforces Round 875 (Div. 1) A. Copil Copac Draws Trees

2023-11-12

题意

Copil Copac 给定了一个由 n−1
条边组成的列表,该列表描述了一棵由 n
个顶点组成的树。他决定用下面的算法来绘制它:

步骤 0:绘制第一个顶点(顶点1)。转到步骤1。
步骤 1:对于输入中的每一条边,依次:如果该边连接一个已经 制的顶点u和一个未绘制的顶点v ,则绘制未绘制的顶点v 和该边。检查完每一条边后,进入步骤2 。
步骤2 :如果所有顶点都绘制完毕,则终止算法。否则,转到步 1 。

读取次数定义为 Copil Copac 执行步骤1 的次数。
求出 Copil Copac 画树所需的读数。

输入

输入:
每个测试包含多个测试用例。第一行输入包含一个整数t (1≤t≤104)–测试用例数。测试用例说明如下。
每个测试用例的第一行包含一个整数 n (2≤n≤2⋅105 )–树的顶点数。
每个测试用例的下面n−1 行包含两个整数ui 和vi (1≤ui,vi≤n ui≠vi)–表示(ui,vi) 是列表中的i 条边。可以保证给定的边构成一棵树。
保证所有测试用例的 n 之和不超过 2⋅105


在这里插入图片描述
在这里插入图片描述

思路

可以这样思考 ,对于一个已经构建好了的图的相邻的三个点a,b,c(b点为中间点),如果a,b边构建的序号在b,c,边之后,那么在构建a,b边之后至少还需要一次额外的操作来构建b,c,边。那么可以根据这个思路,从1点开始往他的临界点dfs,判断条件是否需要次数+1,最后所有的值取最大值输出即可。

代码

#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100,inf=0x3f3f3f3f;
int n ,m;
int s[N];

int h[N],ne[N],e[N],idx,w[N];
bool st[N];

map<pair<int,int>,int>q;

void add(int a,int b)//连边
{
    ne[idx]=h[a];
    e[idx]=b;
    h[a]=idx++;
}

int   dfs(int x,int time,int head)
{
    int k=time;
    for(int i =h[x];i!=-1;i=ne[i])
    {
        int j =e[i];
        if(j==head)continue;//如果dfs到上一个节点就不进行dfs
        if(head!=-1&&q[{head,x}]>q[{x,j}]) k =max(k,dfs(j,time+1,x));//dfs遍历
        else k =max(k,dfs(j,time,x));
    }
    return k;
}

void slove( )
{
    int t;
    sc_int(n);
    
    memset(h,-1,sizeof h);
    idx=0;
    for(int i =1;i<n;i++)
    {
        int a,b;
        cin>>a>>b;
        add(a,b),add(b,a);//因为是无向图所以建双向边
        q[{a,b}]=q[{b,a}]=i;//保存次序
    }

    cout<<dfs(1,1,-1);


    cout<<endl;
}

int main()
{
    int t;
    sc_int(t);
    while(t--)
    slove();


    return 0;
}

//ps: 这段时间发生了很多事,总之已经是打算退役了吧,之后的cf也就是偶尔写写

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeforces Round 875 (Div. 1) A. Copil Copac Draws Trees 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 剑指offer15替换空格字符串

    package heima study day3 import java util Scanner public class 替换空格剑指offer public static void main String args Scanner i
  • Java安全代码扫描问题:不允许使用自动加载类

    解决问题 代码安全扫描 Classes should not be loaded dynamically 要求 Remove this use of dynamic class loading 解决方法 使用jdk自带方法 ClassLoa
  • 【因果学习】VC RCNN(CVPR 2020)代码

    作者基于MaskRCNN框架 Detectron2的前身 开发 受Bottom Up and Top Down Attention for Image Captioning and VQA启发 使用Mask RCNN作为Bottom Up的
  • java spring scope_java – Spring和scope属性

    我在Spring学习中遇到问题 需要一些帮助 我正在学习bean的原型范围 这基本上意味着每次有人或其他bean需要这个bean时 Spring会创建一个新bean而不使用相同的bean 所以我尝试了这段代码 假设我有这个Product类
  • DPDK+Pktgen 高速发包测试

    Pktgen概述 Pktgen Packet Gen erator 是一个基于DPDK的软件框架 发包速率可达线速 提供运行时管理 端口实时测量 可以控制 UDP TCP ARP ICMP GRE MPLS and Queue in Que
  • 在微软工作365天,还你一个我眼中更加真实的微软

    去年12月28日 我正式成为了微软中国的一名员工 今天又是12月28日 不知不觉我已经在这里工作365天了 其实在入职100天的时候我就写过一篇关于微软的文章 详见 在微软工作100天 谈谈我眼中的微软 但那个时候毕竟待的时间还比较短 所以
  • 零基础入门金融风控 Task2 数据分析

    文章目录 1 导入数据分析及可视化过程需要的库 2 读取文件 3 总体了解 4 查看数据集中特征缺失值 唯一值等 5 查看特征的数值类型有哪些 对象类型有哪些 6 变量分布可视化 6 时间格式数据处理及查看 7 掌握透视图可以让我们更好的了
  • 【Linux工具】-yum/gdb

    yum gdb 一 yum 1 简介 2 软件下载 3 软件删除 4 yum源与扩展yum源 5 常见选项 二 gdb 1 简介 2 gdb相关指令 一 yum 1 简介 在Linux下 下载软件通常的方法是下载源代码 然后进行编译得到可执
  • 【单片机毕业设计】【mcuclub-yq-001】基于单片机的翻蛋器 孵化器的设计

    最近设计了一个项目基于单片机的翻蛋器 孵化器系统 与大家分享一下 一 基本介绍 项目名 翻蛋器 孵化器 项目编号 mcuclub yq 001 单片机类型 STC89C52 STM32F103C8T6 具体功能 1 通过DS18B20测量温
  • 学习Java第三天——手机类的创建与使用

    需求 定义一个手机类 然后定义一个手机测试类 在手机测试类中通过对象完成成员变量和成员方法的使用 学习时间 2022 6 21凌晨 程序 成员变量 品牌 价格 成员方法 打电话 发短信 手机类 package com pipi test1
  • 第06篇 开闭原则

    一 定义 开闭原则 Open Closed Principle OCP 一个软件实体应当对扩展开放 对修改关闭 即软件实体应尽量在不修改原有代码的情况下进行扩展 开闭原则是面向对象的可复用设计的第一块基石 它是最重要的面向对象设计原则 二
  • 【gitHubDailyShare】开源的 C++ 入门学习资源,C++ 匠心之作

    分享 GitHub 上一份开源的 C 入门学习资源 Cpp 0 1 Resource 主要包含以下内容 第 1 阶段 C 匠心之作 从 0 到 1 入门 第 2 阶段实战 通讯录管理 第 3 阶段 C 核心编程 第 4 阶段实战 基于多态的
  • 解决ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)

    ERROR 2003 HY000 Can t connect to MySQL server on localhost 3306 10061 1 安装成功之后输入MYSQL报出ERROR 2003 HY000 Can t connect t
  • 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列 上一篇第五篇 基于背景差分法的视频目标运动侦测 一 网络爬虫简介 Python3 网络爬虫 大家应该不陌生了 接下来援引一些Jack Cui在专栏 Python3网络爬虫入门 中的内容来帮助初学者理解
  • QT 如何修改工程(项目)名?

    前因 我们有时候一开始起的项目名到后面并不合乎心意时 而且项目里面的大多数类都是重复的 此时我们只想修改一下工程名即可 步骤如下 在这里假设我原来的工程名字是test 想要修改成名字为demo 第一步 打开工程文件夹 除了test pro以
  • 【JVM】JVM垃圾回收机制GC

    文章目录 JVM垃圾回收机制 一 堆内存区域划分 1 1内存分配策略 1 2永久代 Permanent Generation 1 3元空间 MetaSpace 二 标记算法 2 1引用计数算法 2 2可达性分析算法 2 3引用 强引用 Ha
  • Matlab中读取excel表格数据

    一 Matlab中读取excel表格数据步骤讲解 第二步 第三步 第四步 第五步 第六步 第七步 输入之后按回车键 就会出现相应的波形 效果图
  • 链接、装载与库——编译与链接

    从第二章开始不再按照目录的顺序总结 而是将大块知识点总结在一起 第二章 编译和链接 集成开发环境 IDE 一般都将编译和链接的过程一步完成 此过程成为构建 Bulid 但其掩盖了系统软件运行机制 gcc hello c a out 一个可执
  • win10离线安装ros-melodic-desktop_full

    在线安装最容易出现安装包下载不了导致的安装失败问题 本篇文章续上篇在线安装 安装在线包 下载ros melodic desktop full 下载地址 ros melodic离线包下载地址 开始菜单中 右键 x64 Native Tools
  • Codeforces Round 875 (Div. 1) A. Copil Copac Draws Trees

    题意 Copil Copac 给定了一个由 n 1 条边组成的列表 该列表描述了一棵由 n 个顶点组成的树 他决定用下面的算法来绘制它 步骤 0 绘制第一个顶点 顶点1 转到步骤1 步骤 1 对于输入中的每一条边 依次 如果该边连接一个已经