题意:
     给你一棵树,让你再里面选取两个点作为**点,然后所有点的权值是到这两个点中最近的那个的距离,最后问距离中最长的最短是多少,输出距离还有那两个点(spj特判)。

思路:
     现场赛的时候我们压根就没看这道题,还有k题也是水题,可惜当时我们读的题意不对<以为数字可以随意断开,然后拼接的数组可以再段。。>,最后只过了3个题,拿了个铜,不过没啥遗憾,因为这是第一次去亚洲赛,没空手而归就是好事,下几场放开了打就行了。

回到这个题目,其实这个题目我们可以判定的是这两个点分别"罩着"两棵树<原因是最后的答案已经是小于等于树的直径的一半的,如果在同一侧,那么答案就大于等于直径的一半了>,这两颗树一定是整个树从直径断开的分成的两颗树,那么我们就两遍广搜分成两颗树,然后再在两颗树上分别找直径,然后两个点就是直径的中点,然后答案就是两个塔到所有自己所在的那颗子树上所有点的最大距离的最大距离,其他的还有一些细节,比如分成两颗树后有一棵树只剩1个点的时候,去中点可能弄错,这个地方注意点,具体细节可以看代码

#include<stdio.h>
#include<string.h>
#include<queue>#define N_node 200000 + 10
#define N_edge 400000 + 20using namespace std;typedef struct
{int node ,t;
}NODE;typedef struct
{int to ,next;
}STAR;NODE xin ,tou;
STAR E[N_edge];
int list[N_node] ,tot;
int mer[N_node] ,mark[N_node];
int root[N_node];void add(int a ,int b)
{E[++tot].to = b;E[tot].next = list[a];list[a] = tot;E[++tot].to = a;E[tot].next = list[b];list[b] = tot;
}int maxx ,mknode;
void BFS(int s ,int aa ,int bb)
{queue<NODE>q;memset(mark ,0 ,sizeof(mark));xin.node = s ,xin.t = 0;mark[s] = 1;q.push(xin);maxx = 0 ,mknode = s;while(!q.empty()){tou = q.front();q.pop();if(maxx < tou.t){maxx = tou.t;mknode = tou.node;}for(int k = list[tou.node] ;k ;k = E[k].next)if(!mark[E[k].to]){xin.node = E[k].to;xin.t = tou.t + 1;if(aa == tou.node && bb == xin.node || aa == xin.node && bb == tou.node)continue;mer[xin.node] = tou.node;mark[E[k].to] = 1;q.push(xin);}}
}int main ()
{int n ,t ,i ,a ,b;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);memset(list ,0 ,sizeof(list)) ,tot = 1;for(i = 1 ;i < n ;i ++){scanf("%d %d" ,&a ,&b);add(a ,b);}BFS(1 ,-1 ,-1);int mk1 = mknode; BFS(mk1 ,-1 ,-1);int mk2 = mknode;int nowid = 0;int x = mk2;while(x != mk1){root[++nowid] = x;x = mer[x];}root[++nowid] = mk1;int aa = root[nowid/2];int bb = root[nowid/2+1];BFS(aa ,aa ,bb);mk1 = mknode;BFS(mk1 ,aa ,bb);mk2 = mknode;nowid = 0;x = mk2;while(x != mk1){root[++nowid] = x;x = mer[x];}root[++nowid] = mk1;//for(i = 1 ;i <= nowid ;i ++)//printf("%d *\n" ,root[i]);//puts("");int aaa = root[nowid/2+1]; BFS(bb ,aa ,bb);mk1 = mknode;BFS(mk1 ,aa ,bb);mk2 = mknode;nowid = 0;x = mk2;while(x != mk1){root[++nowid] = x;x = mer[x];}root[++nowid] = mk1;int bbb = root[nowid/2+1];BFS(aaa ,aa ,bb);int Ans1 = maxx;BFS(bbb ,aa ,bb);int Ans2 = maxx;int Ans = Ans1 > Ans2 ? Ans1 : Ans2;printf("%d %d %d\n" ,Ans ,aaa ,bbb);}return 0;
}

Building Fire Stations 39届亚洲赛牡丹江站B题相关推荐

  1. Known Notation 39届亚洲赛牡丹江站K题

    题意:       题意,哎!说道题意就蛋疼啊,比赛的时候就愣是把这个题目读成数字可以随意组合,比如123 可以拆成1 23 ,12 3 ,1 2 3,结果显然,水题当神题,各种想不出来,然后就显然的 ...

  2. Average Score39届亚洲赛牡丹江站A题

    题意:       A班有n个人,B班有m个人,然后现在给你n-1个A班人的成绩,和m个B班人的成绩,然后题目要求求出A班剩下的没给成绩那个人的成绩范围,要求是这个人从A班转到B班后能使A,B的平均分 ...

  3. 突击蓝桥杯嵌入式(七)——第十三届省赛第一场真题

    突击蓝桥杯嵌入式(七)--第十三届省赛第一场真题 一.题目概览 二.思路梳理 我们直接在LCD例程的基础上,改需增加的外设如下: LED灯(配置锁存器PD2),串口(波特率9600,带中断),按键4个 ...

  4. 2013 年亚洲赛杭州赛区卡题总结

         今天这场比赛,真的打的很痛苦,从头卡到尾,实在是无语,哭死,这是一次严重的战略失误!!! 好吧!就先描述一下所有的比赛过程吧! 赛前安排,中场12:30无论如何必须把所有题看一遍,然后挑几题 ...

  5. ZOJ 3820 Building Fire Stations

    题意: 树上找两个点  使得其它点到这两点随意一点的距离的最大值最小 思路: 最大值最小  想到二分  在二分的基础上判定这个最大值是否可能 怎样判定这个问题就是怎样选那两个点的问题  非常明显  我 ...

  6. Building Fire Stations

    题目链接 首先找到树的直径,直径左端点是a,直径右端点是b,中间的点是mid(偶数的情况下mid可以看做两个),两点因该是左右分布: 假设两点都不在直径上,那么移到直径上的话距离更短: 设直径上左边的 ...

  7. 2022年4月23日第十三届省赛蓝桥杯真题答案_python_第五题_统计未被污染的海域

    第五题如约而至哈,和第六题差不多(但比第六题简单).好!上题目: 题目: 有一片海域划分为N*M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示).请问这片N*M海域中有几块是没被 ...

  8. 蓝桥杯第七届省赛java组大题解析(“取球博弈”??难度,“压缩变换”三星难度)

    第六题 题目: 方格填数 如下的10个格子    +--+--+--+    | 0| 1| 2| +--+--+--+--+ | 3| 4| 5| 6| +--+--+--+--+ | 7| 8| ...

  9. 2018ICPC网络赛(焦作站)K题题解

    一.题目链接 https://nanti.jisuanke.com/t/31720 二.题意 给$N$种船只,第$i$种船的载重量是$V_i$,数量是$2^{C_i}-1$.接下来有$Q$次询问,每次 ...

最新文章

  1. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
  2. python中的class怎么用_对python 中class与变量的使用方法详解
  3. 【小白学习keras教程】六、基于CIFAR-10数据集训练CNN-RNN神经网络模型
  4. ----icon moon追加新字体图标----
  5. oracle计算表的大小,简要分析估算oracle表的大小
  6. Nessus进行漏洞扫描的过程
  7. Kubernetes之(五)快速部署应用
  8. ehcache缓存的详细配置
  9. uni-app中的数据绑定
  10. 千万别惹程序员之经典的SQL注入式***
  11. vue 监听div滚动事件
  12. structs2框架学习一(启动过程和各种配置)
  13. 高通骁龙600系列处理器
  14. 盘点 | 从Uber的肇事无人车开始,细数这些年的人工智障
  15. 苹果手机能有软件测试硬件是否给更换过,爱思助手等第三方软件检测靠谱吗?果粉必须了解!...
  16. 阿里为什么总mysql_为什么部署在阿里云上 MySQL 老是因为内存而挂掉,不是个例....
  17. 与其道听途说,不如少走点弯路,轻松跟我来全面剖析 darknet 官网!
  18. [架构之路-159]-《软考-系统分析师》-10-系统分析-6-现有业务流程分析, 系统分析最核心的任务
  19. Windows Phone开发准备:Edu邮箱、Dreamspark、App Hub、Zune、手机解锁、程序部署
  20. 为何从游戏剧本的角度看,《最后生还者2》的体验并不好?

热门文章

  1. mongoose的基本使用
  2. Skype for Business Server 2015-12-WAP-发布-2-邮件服务器
  3. linux学习笔记-第一课-linux的历史,安装linux,远程连接
  4. DHTML【2】--HTML
  5. 超酷的实时颜色数据跟踪javascript类库 - Tracking.js
  6. 爬取百度网盘资源报user is not authorized, hitcode:119
  7. BZOJ1082: [SCOI2005]栅栏
  8. C: Answers to “The C programming language, Edition 2”
  9. Sqlite c/c++ api 学习
  10. W - Pasha and Phone CodeForces - 595B (收益颇丰的数学题