NOIP 冲刺 模板:树的直径
来源:互联网 发布:淘宝宝贝尺寸规格设置 编辑:程序博客网 时间:2024/06/05 18:22
题目描述
树的直径:树上两点之间的最大距离。
给出一个树,让你求树的直径。
输入
一个数n表示节点数,以下(n-1)行每行两个数x,y表示x与y间有边。
输出
一个整数,树的直径。
样例输入
10
2 8
7 2
2 1
1 10
2 3
3 4
4 9
3 5
3 6
样例输出
5
提示
40% n<=2000
100% n<=200000
#include <cstdio>#include <iostream>#include <queue>#include <cstring>#define N 200005using namespace std;int n,tot;int nex[N*2];int to[N*2];int head[N*2];inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}bool vis[N*2];int dis[N*2];inline void add(int x,int y){ ++tot; nex[tot]=head[x]; head[x]=tot; to[tot]=y;}inline int spfa(int u){ queue<int> q; memset(dis,0x7f7f7f,sizeof(dis)); memset(vis,0,sizeof(vis)); q.push(u); dis[u]=0; vis[u]=1; while(!q.empty()){ int dmf=q.front(); q.pop(); for(int i=head[dmf];i;i=nex[i]){ if(dis[to[i]]>dis[dmf]+1){ dis[to[i]]=dis[dmf]+1; if(!vis[to[i]]){ vis[to[i]]=1; q.push(to[i]); } } } vis[dmf]=0; } int maxn=0; int id; for(int i=1;i<=n;i++){ if(i!=u){ if(dis[i]>maxn){ id=i; maxn=dis[i]; } } } return id;}int main(){ n=read(); for(int i=1;i<n;i++){ int x,y; x=read(); y=read(); add(x,y); add(y,x); } int ans=0; int id=spfa(1); ans+=dis[id]; int ans1=ans; int id2=spfa(id); if(id==1) ans=max(ans,dis[id2]); else ans+=dis[id2]; printf("%d",ans-ans1); return 0;}
阅读全文
0 0
- NOIP 冲刺 模板:树的直径
- NOIP 冲刺之manacher模板
- 【模板】树的直径
- 树的直径模板
- 树的直径模板
- 树的直径(模板)
- TyvjP1520 树的直径(模板)
- 冲刺NOIP!
- Noip冲刺
- noip冲刺
- 【NOIP冲刺】
- 树的直径模板~~最长路径
- POJ1985Cow Marathon(求树的直径模板)
- poj 1985 树的直径模板题
- 阿柟的NOIP冲刺计划
- NOIP冲刺计划
- noip冲刺 持续更新
- 【plan】noip冲刺计划
- 实验二 Linux用户管理
- jQuery两个选择框的边框变化小练习
- 关于怎么安装markcode
- ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件
- David Silver强化学习课程笔记(四)
- NOIP 冲刺 模板:树的直径
- 基于 Anaconda3 5.0.0 JupyterLab 0.27.0 使用 ftplib 演示 IPv4 和 IPv6 上传文件和下载文件
- 1011 最大公约数GCD——51Nod(__gcd() )
- 数据结构笔记之树与二叉树
- 机器学习(周志华)习题3.3
- RTSP协议分析
- java中HashMap排序中实现Comparator接口
- 数据库存储过程
- python下载及安装