SPOJ 9126 Time to live

简介: 点击打开SPOJ 9126 题意:给定一个n台计算机的网络的连接图,这个图是一棵树的形式。现在要以某一台计算机为路由器,问其它的计算机到路由器的最长的距离的最小值 思路:给定一个树,我们能够求出树的直径。

点击打开SPOJ 9126

题意:给定一个n台计算机的网络的连接图,这个图是一棵树的形式。现在要以某一台计算机为路由器,问其它的计算机到路由器的最长的距离的最小值

思路:给定一个树,我们能够求出树的直径。那么直径的两端的距离是最长的,那么路由器的选择肯定是在树的直径上面的某一点,因为要距离最小因此选择中间的点肯定能够满足。那么maxLen为直径的话,ans为(maxLen+1)/2

代码:

#include<vector>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

const int MAXN = 100010;

struct Node{
    int num;
    int step;
};

int n , start , maxLen;
bool vis[MAXN];
vector<int>v[MAXN]; 
queue<Node>q;

void init(){
    for(int i = 0 ; i < n ; i++)
        v[i].clear();
    int x , y;
    for(int i = 1 ; i < n ; i++){
        scanf("%d%d" , &x , &y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
}

void bfs(){
    maxLen = 0;
    while(!q.empty()){
        Node tmp = q.front();
        q.pop();
        int x = tmp.num;
        int size = v[x].size();
        bool isOk = false;
        vis[x] = true;
        for(int i = 0 ; i < size ; i++){
            if(!vis[v[x][i]]){
               q.push((Node){v[x][i] , tmp.step+1}); 
               isOk = true;
            }       
        }
        if(!isOk && maxLen < tmp.step){
           maxLen = tmp.step;
           start = x; 
        }
    }
}

int solve(){
    while(!q.empty())
        q.pop();
    q.push((Node){0,0});
    memset(vis , false , sizeof(vis));
    bfs();

    while(!q.empty())
        q.pop();
    q.push((Node){start,0});
    memset(vis , false , sizeof(vis));
    bfs();
    
    return (maxLen+1)/2;
}

int main(){
    int cas;
    scanf("%d" , &cas);
    while(cas--){
        scanf("%d" , &n);
        init();
        printf("%d\n" , solve());
    }
    return 0;
}




目录
相关文章
|
应用服务中间件 Linux nginx
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
10月前
|
机器学习/深度学习 网络架构
揭示Transformer重要缺陷!北大提出傅里叶分析神经网络FAN,填补周期性特征建模缺陷
近年来,神经网络在MLP和Transformer等模型上取得显著进展,但在处理周期性特征时存在缺陷。北京大学提出傅里叶分析网络(FAN),基于傅里叶分析建模周期性现象。FAN具有更少的参数、更好的周期性建模能力和广泛的应用范围,在符号公式表示、时间序列预测和语言建模等任务中表现出色。实验表明,FAN能更好地理解周期性特征,超越现有模型。论文链接:https://arxiv.org/pdf/2410.02675.pdf
271 68
|
11月前
|
人工智能 供应链 物联网
区块链技术在金融科技中的应用探索
区块链技术在金融科技中的应用探索
|
弹性计算 JSON 监控
EventBridge:构建SaaS应用集成的桥梁,让数据流动成为一场精彩的交响乐!
【8月更文挑战第8天】在云计算时代,SaaS应用因灵活性和可扩展性备受青睐,但多应用环境下的数据共享成为挑战。Amazon EventBridge作为一款无服务器事件总线服务,支持应用程序、SaaS应用及AWS服务间的事件驱动交互。它简化了事件产生、路由与处理流程,支持自定义与内置事件,实现应用间松耦合集成,提升系统可维护性和扩展性。通过定义业务相关事件、创建事件模式及规则,可轻松配置目标动作(如Lambda函数),实现如新订单触发CRM更新等场景。EventBridge提供高效灵活的集成方式,有助于提高应用响应性和可扩展性,成为云架构师不可或缺的技能之一。
215 7
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
276 1
|
开发框架 前端开发 JavaScript
探索现代Web开发中的框架选择:Blazor、Angular和React的全面比较与分析
【8月更文挑战第31天】随着Web开发技术的发展,选择合适的框架对项目成功至关重要。本文对比了三大前端框架:Blazor、Angular和React。Blazor是微软推出的.NET Web客户端开发框架,支持C#编写前端代码;Angular由Google支持,基于TypeScript,适用于大型应用;React是由Facebook维护的高效JavaScript库。
381 0
|
存储 Kubernetes 调度
在k8S中,PV和PVC如何使用?
在k8S中,PV和PVC如何使用?
|
Oracle 关系型数据库 MySQL
OceanBase有什么特性?
OceanBase有什么特性?【8月更文挑战第12天】
377 0
|
SQL JSON Java
Flink报错问题之执行sqlQuery报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。