Caterpillar POJ - 3310(树的直径)

LSM6DSOW陀螺仪轮询驱动:从I2C/SPI配置到数据读取全解析 惯性测量单元(IMU)是现代嵌入式系统中实现姿态感知与运动跟踪的核心传感器,其通过加速度计和陀螺仪测量线性加速度与角速度。在嵌入式开发中,轮询(Polling)作为一种基础且可靠的通信方式,通过主循环主动查询传感器状态,简化了初始调试与验证流程。对于I2C/SPI接口的数字传感器,掌握寄存器配置、数据就绪标志检查及原始数据转换是通用的驱动方法,能够快速验证传感器工作状态并理解数据流。LSM6DSOW作为一款高性能6轴IMU,支持可配置的量程与输出数据速率,适用于无人机飞控、手持云台等高动态场景。本文以LSM 阅读详情

Caterpillar POJ - 3310

An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node on the path. This path is called the spine of the caterpillar and the spine may not be unique. You are simply going to check graphs to see if they are caterpillars.

For example, the left graph below is not a caterpillar, but the right graph is. One possible spine is
shown by dots.

这里写图片描述
Input

There will be multiple test cases. Each test case starts with a line containing n indicating the number of nodes, numbered 1 through n (a value of n = 0 indicates end-of-input). The next line will contain an integer e indicating the number of edges. Starting on the following line will be e pairs n1 n2 indicating an undirected edge between nodes n1 and n1. This information may span multiple lines. You may assume that n ≤ 100 and e ≤ 300. Do not assume that the graphs in the test cases are connected or acyclic.

Output

For each test case generate one line of output. This line should either be
    Graph g is a caterpillar.
or
    Graph g is not a caterpillar.

as appropriate, where g is the number of the graph, starting at 1.

Sample Input

22
21
1 2 2 3 2 4 2 5 2 6 6 7 6 10 10 8 9 10 10 12 11 12 12 13 12 17
18 17 15 17 15 14 16 15 17 20 20 21 20 22 20 19
16
15
1 2 2 3 5 2 4 2 2 6 6 7 6 8 6 9 9 10 10 12 10 11 10 14 10 13 13 16 13 15
0

Sample Output

Graph 1 is not a caterpillar.
Graph 2 is a caterpillar.
题意:

判断一个图是否是一棵树(是否全部连通并且不存在环),并且满足条件,存在一条链,使得所有点要么在链上要么与链上的点距离为1。
输入格式,多组输入数据,每一组,第一行个数n,第二行边数m,第三行共m对(2*m个),每一对的数字是点的编号,表示这两个点之间连一条边。

分析:

判断是否是一棵树可以用dfs。证明为什么这条链是树的直径:假设存在这样一条链,那么所有非此链上的点到此链的距离都为1,所以并不会存在一条更长的链,这条链就是最长的,即为树的直径。标记出这条链,最后判断一下所有点是否满足条件。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,m,x,y,tot,to[1000],nxt[1000],first[200];
int dis[200],nbor[200],maxd,po,t;
bool check,flag,vis[200];

void add(int u,int v){
    to[++tot] = v;
    nxt[tot] = first[u];
    first[u] = tot;
}

void dfs1(int u,int fa){//判断是否是一棵树
    vis[u] = true;
    for(int e = first[u]; e; e = nxt[e]){
        int v = to[e];
        if(v != fa){
            if(vis[v]){//如果一个节点重复访问了,说明有环
                check = true;
                return;
            }
            dfs1(v,u);
            if(check) return;
        }
    }
}

void dfs2(int u,int fa){//寻找树的直径
    for(int e = first[u]; e; e = nxt[e]){
        int v = to[e];
        if(v != fa){
            dis[v] = dis[u] + 1;
            nbor[v] = dis[v];
            if(dis[v] > maxd){//记录最长的路径长度
                maxd = dis[v];
                po = v;
            }
            dfs2(v,u);
            nbor[u] = max(nbor[u],nbor[v]);//记录儿子所能返回的最大值,最终在直径上的点都是maxd
                                           //其他非直径上的点都小于maxd
        }
    }
}

int main(){
    while(~scanf("%d",&n) && n){
        t++;
        check = false;
        tot = 0;
        memset(vis,false,sizeof(vis));
        memset(first,0,sizeof(first));
        scanf("%d",&m);
        for(int i = 1; i <= m; i++){
            int u,v;
            scanf("%d%d",&u,&v);
            add(u,v);
            add(v,u);
        }
        if(m > n - 1) check = true;//边数多余n-1必然不是树
        if(!check) dfs1(1,0);//判断是否有环
        if(!check){
            for(int i = 1; i <= n; i++){//判断是否连通
                if(!vis[i]){
                    check = true;
                    break;
                }
            }
            if(!check){
                maxd = 0;
                memset(dis,0x3f3f3f3f,sizeof(dis));
                memset(nbor,0,sizeof(nbor));
                dis[1] = 0;
                dfs2(1,0);
                dis[po] = 0;
                dfs2(po,0);
                for(int i = 1; i <= n; i++){
                    flag = false;
                    if(nbor[i] == maxd) continue;//如果是直径上的直接跳过
                    for(int e = first[i]; e; e = nxt[e]){
                        if(nbor[to[e]] == maxd){//如果不是直径上的点必须满足存在相邻点在直径上
                            flag = true;
                            break;
                        }
                    }
                    if(!flag){
                        check = true;
                        break;
                    }
                }
            }
        }
        if(check==true) printf("Graph %d is not a caterpillar.\n",t);
        else printf("Graph %d is a caterpillar.\n",t);
    }
    return 0;
}
Proxmox VE网络配置踩坑实录:从Web界面无法访问到完美修复的全过程 本文详细记录了Proxmox VE服务器Web界面无法访问的完整排查与修复过程。作者从基础网络连通性测试入手,逐步排查了服务状态、SSL证书、端口监听、防火墙规则及网关配置,最终定位并解决了问题。文章提供了系统性的故障排查思路和实用的修复命令,对管理Proxmox VE网络具有重要参考价值。 阅读详情

相关推荐

突破Shopee平台数据采集的风控挑战与技术解决方案

高效、稳定、合规的数据采集能力,始终是我们服务的核心价值。多类型代理组合:采用高匿名住宅代理(模拟真实用户IP)与数据中心代理(高并发需求)混合策略,结合IP轮换频率与目标国家后缀(如.com.my、.vn)动态匹配14。反反爬数据过滤:针对Shopee页面中的混淆数据(如虚假价格标签、隐藏元素),采用XPath精准定位结合正则表达式清洗,确保数据准确性89。随机化请求间隔:在爬虫代码中引入随机延迟(如1-5秒),并模拟“浏览-点击-滚动”等用户行为链,降低行为模式的可预测性48。

klj3388的博客 2976

Caterpillar (图论 & 思维)

Caterpillar An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node on the path...

Steve·Curcy 1319

Spirent TestCenter 3.90吞吐测试全流程详解(附RFC 2544配置避坑指南)

本文详细解析了使用Spirent TestCenter 3.90进行网络吞吐测试的全流程,并提供了符合RFC 2544标准的配置指南与避坑要点。内容涵盖测试环境搭建、核心概念澄清、STC软件配置步骤、结果深度解读以及自动化脚本入门,旨在帮助网络测试工程师精准评估设备性能,规避常见配置陷阱。

weixin_42602368的博客 369

POJ 3310(并查集判无环连通图)

题意:给定一个无向图,判断是否是一个caterpillar。是caterpillar的条件是:一,无环连通图。二,存在一条'脊柱',使所有的点要么在‘脊柱’上,要么与在‘脊柱’上的点相连。 思路:可用并查集判断

smwqd_yehua_cx的博客 484

Android音频混音器AudioMixer实战:从多路输入到设备播放的完整流程解析

本文深入解析了Android平台上音频混音器AudioMixer的完整工作流程,涵盖从多路音频输入、轨道创建与配置、AudioBufferProvider数据源接入,到核心混音处理与最终设备播放的全过程。文章重点探讨了如何高效管理音频数据流、配置音量与重采样参数,并提供了缓冲区管理与性能优化的实战技巧,帮助开发者构建稳定、低延迟的音频应用。

l3m4n的博客 341

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,

KJ.JK 218

POJ - 3310 Caterpillar ,bfs,图,树的直径,并查集

Caterpillar An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node on the path....

监心司的博客 339

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

【POJ - 3310】Caterpillar(并查集判树+树的直径求树脊椎(bfs记录路径)+dfs判支链)

题干: An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node on the path. This p...

xuanweiace的博客 781

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 562

把大表拆成更好用的“小仓库”:SAP HANA 表分区设计、分区裁剪与内存代价全解析

摘要:本文深入解析SAP HANA分区技术的核心价值与实现策略。作为内存数据库的"手术刀",分区通过将逻辑表横向切分为独立物理容器,显著提升并行计算能力与查询效率。重点探讨了三种分区类型(Range、Hash、Round-robin)的适用场景,以及分区裁剪的优化原理与前提条件。特别指出分区设计需要平衡查询模式与数据分布,并揭示了分区对内存占用的双向影响机制:既可能因字典复制增加消耗,也可能因数据纯度提升压缩率。通过电商订单表等实际案例,展示了合理分区如何将分钟级报表优化至秒级响应。文章

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1648

poj3310Caterpillar(树直径)

1.连通性 2.树 3.求直径 struct UNION { int F[101]; void init(int n = 0) { memset(F, -1,sizeof F); } int find(int u) { return F[u] == -1?u:F[u] = find(F[u]); } bool

KIJamesQi的博客 739

将 AMDP Function Implementations 讲透:从 SAP CDS View 表函数到 AMDP 方法的完整实战与最佳实践

AMDP函数实现:连接ABAP与HANA的高效桥梁 本文面向ABAP开发者,详细解析AMDP函数实现技术,帮助在SAP HANA环境中充分发挥数据库算力。核心内容包括: 技术价值:解决复杂计算场景(窗口函数、跨表聚合等)中Open SQL和CDS的局限性 两种实现类型:内部复用函数与CDS表函数实现,对比其声明规则和用途差异 关键语法要点:FOR TABLE FUNCTION绑定、只读约束、参数与返回类型自动生成机制 实战应用:以采购订单聚合为例,展示AMDP在实时报表中的性能优势 完整示例:提供基于航线数

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 381

[POJ 3310][树的直径]Caterpillar

题目描述: 题目链接: poj 3310 Caterpillar DescriptionAn undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or

千古的博客 943

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 3310 Caterpillar 解题报告 (树的直径)

传送门:http://poj.org/problem?id=3310 这题题意结合图示比较好理解,就是判断一个图是否可以找到一条直径,使得所有的边,要不在这个直径上,要不有其中的一个端点在这一条直径上,而且这个图不能有环,而且还必须是连通图。这估计也是为啥这个题叫毛毛虫的原因吧…… 第一次看到这个题,说实话我想的是先判断树直径的两个端点,再深搜一下标记上这个直径上所有的点,再判断剩下的未标记的...

鶸Atlas的博客~~ 588

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

poj 3310 Caterpillar(树的直径)

Caterpillar Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2897 Accepted: 1319 Description An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a...

tb_youth的博客 300

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ3310-Caterpillar 树的直径+两次dfs+自个儿琢磨的小等式!

题源:http://poj.org/problem?id=3310 这道题折腾了我好久。WA了九次,不断修改判断方法。终于在今天早上A了。 〇、先说题目大意 给你一个树(但默认不是树,默认给的是图,你得判断是不是树,不能直接拿树去做)的点数n 和边数m,然后给你m对边,让你判断是不是个毛毛虫。那么什么是毛毛虫呢?官方一点的描述就是,找出树最长的一条(就是树的直径),然后这条直径所连接的其他点必须都...

枚举星星 414

poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径上的点进行标记,于是根据题意我们可以发现,如果这个图是“caterpillar”的话,那么他所有的边要么两端都在树上最长直径上,要么就是其中一端在,于是我们可以再次dfs进行判断就可以了。 ...

weixin_34399060的博客 185

POJ 树的直径和重心

树的直径:(无根)树上最长两点间的最长路径,两次dfs即可,第一次dfs任选一点u,找到距离它最远的点s,再从点s进行一次dfs,找到距离s最远的点t,则s-t之间的路径就是树的直径。证明: <http://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html> poj2631 树的直径裸题 #include&...

weixin_30478923的博客 755

Caterpillar POJ - 3310

题目链接:https://cn.vjudge.net/problem/POJ-3310 题目 判断一个图是否是一棵树(是否全部连通并且不存在环),并且满足条件,存在一条链,使得所有点要么在链上要么与链上的点距离为1。 分析 树的直径?反正我没用树的直径做,下面是我的做法。先用并查集判断是否连通以及是否有环,然后我们可以发现,如果满足条件的话,当我们把所有度为1的点全部拿出来之后(当然,与这...

黄油^小饼干的博客 275

Caterpillar POJ - 3310(拓扑排序+求树的直径)

不容易啊不容易 搞了够四个小时 题意:所有的度数大于1的点(与之有边的点不止一个的点)必须在最长路上,并且不存在环和孤点,问给出的图是否满足以上条件。 思路:记录好边的度数之后,遍历度数,如果有是0的便存在孤点,否则继续;然后拓扑排序判环;然后求树的直径并在此过程中记录路径,然后遍历度数 看度数>1的点是不是都在这条路上(大佬的做法:直接求树的直径,因为权值都是1,树的直径+1等于点的个数,...

青春苦瓜 281

POJ 3310 Caterpillar

Description: An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node on the path.

Assmel 482

「日常训练」Caterpillar(POJ-3310)

题意与分析 一条很有趣的题目。给一个无向图,问它是否无环,且可以在上面找到一条线,使所有的顶点要么在线上要么不在线上但在与线相连的边上。 那么首先要确定所有点联系在一起。这个可以同判环一起处理:如果建图新加入的点同原先的点含有同一个祖先,那它肯定是环没跑了。然后遍历所有节点,看看是否拥有同一个祖先。这样就完成了两个任务。 接下来需要一点分析:我们可以证明,这条线(如果存在)一定是树的直径,或者是与...

weixin_30532759的博客 180

树的直径模板(dfs)(bfs)

POJ - 3310 Caterpillar An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a path in the graph where every node is either on this path or a neighbor of a node o...

Ellery的book 482

动态规划(树形DP)总结

树的直径 HDU 2196 Computer 实验室里原先有一台电脑(编号为1),最近实验室又购置了N-1台电脑,编号为2到N。每台电脑都用网线连接到一台先前安装的电脑上,求第i台电脑到其他电脑的最大网线长度。 解法一 根据输入数据建树,假设树的最长路的两个叶子结点为 v1,v2v1,v2v1,v2,这道题要求找到某个结点 xxx 所能到达的最长路径,那么这个结点 xxx 的最长路径要么是到v1v1v1的路径,要么就是到v2v2v2的路径,所以首先需要从任意结点开始执行DFS找到最远结点v1v1v1,然后再

Keep eating codes! 247
上一篇: Cow Marathon POJ - 1985(树的直径模板题)
下一篇: Frequent values UVA - 11235(RMQ)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值