ZOJ - 3820 Building Fire Stations
来源:互联网 发布:航天信息开票软件下载 编辑:程序博客网 时间:2024/06/06 07:44
题意:给你一棵树求两个点使得树上所有点到这两个点路径长度的最小值最小
取直径的中点拆掉拆成两棵树,分别求两边的直径中点就是答案==QAQ细节真多==还会爆栈不开心
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define rep(j,k,l) for (int j=k;j<=l;j++)#define N 400005using namespace std;int T,n,cnt,lft,rgt,to[N*2],ne[N*2],st[N],deep[N],miaom[3];int used[N],last[N],que[N];void add(int k,int l){to[++cnt]=l;ne[cnt]=st[k];st[k]=cnt;}int bfs(int k){int head=0,tail=1,_=k;memset(used,0,sizeof(used));used[k]=1;que[1]=k;deep[k]=1;last[k]=0;while (head<tail){int x=que[++head];for (int i=st[x];i;i=ne[i])if (used[to[i]]==0&&(!((x==lft||x==rgt)&&(x+to[i]==lft+rgt)))){que[++tail]=to[i];deep[to[i]]=deep[x]+1;if (deep[to[i]]>deep[_]) _=to[i];used[to[i]]=1;last[to[i]]=x;}}return _;}void init(){cnt=0;scanf("%d",&n);rep(i,1,n) st[i]=0;rep(i,1,n-1){int k,l;scanf("%d%d",&k,&l);add(k,l);add(l,k);}}int mddl(int k,int poi){int o=bfs(k);int p=bfs(o);miaom[poi]=deep[p]/2;for (int i=p;i;i=last[i])if (deep[i]==deep[p]+1-(deep[p]+1)/2) return i;}void solve(){lft=0;rgt=0;rgt=mddl(1,0);lft=last[rgt];int k=mddl(lft,1),l=mddl(rgt,2);lft=0;rgt=0;n=bfs(1);printf("%d %d %d\n",max(miaom[2],max(miaom[1],abs(deep[k]-deep[l])/2)),k,l);}int main(){scanf("%d",&T);while (T--){init();solve();}}
0 0
- 【ZOJ】 3820 Building Fire Stations
- ZOJ 3820 Building Fire Stations
- ZOJ - 3820 Building Fire Stations
- ZOJ 3820 Building Fire Stations
- ZOJ 3820 Building Fire Stations (二分)
- zoj 3820 Building Fire Stations(二分+bfs)
- zoj 3820 Building Fire Stations(树上乱搞)
- zoj 3820 Building Fire Stations(贪心 + 二分)
- ZOJ 3820 Building Fire Stations 二分+BFS
- 【ZOJ】3820 Building Fire Stations 树的直径
- ZOJ 3820 Building Fire Stations(树上的问题)
- zoj 3820 Building Fire Stations (树的直径)
- zoj 3820 Building Fire Stations (二分+树的直径)
- ZOJ 3820 Building Fire Stations / 牡丹江现场赛B题
- ZOJ 3820 Building Fire Stations(二分+BFS)
- ZOJ 3820 Building Fire Stations(树的直径+操作)
- zoj 3820 Building Fire Stations (求树的直径)
- ZOJ Problem Set - 3820 Building Fire Stations 【树的直径 + 操作 】
- 5.1jedis整合spring
- LInkedList源码分析
- 制作Win&kali Linux双系统
- 工作一年的状态与总结
- WebRTC中的前向纠错编码 - Red Packet
- ZOJ - 3820 Building Fire Stations
- 算法导论笔记——计数排序
- Javascript进度条
- 从编译器的角度分析继承中的虚函数
- Java异常处理学习
- OpenCV-Python在线参考手册
- GitHub上使用Hexo搭建博客
- hud 1166 敌兵布阵
- Android仿微博/QQ空间滑动自动播放视频功能