传送门

Solution

虽然不是点分治但用类似点分治的方法不断接近正确结果

Code

  1. // luogu-judger-enable-o2
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <iostream>
  6. #include <algorithm>
  7. #define F(i,a,b) for(register int i=(a);i<=(b);i++)
  8. #define R(i,a,b) for(register int i=(b);i>=(a);i--)
  9. #define E(i,u) for(register int i=head[u],v;i;i=nxt[i])
  10. #define add(a,b,c) nxt[++cnt]=head[a],to[cnt]=b,cst[cnt]=c,head[a]=cnt
  11. #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin)),p1==p2?EOF:*p1++)
  12. using namespace std;
  13. char buf[1<<22],*p1,*p2;
  14. inline int read() {
  15. int x=0,f=1;char c=getchar();
  16. while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
  17. while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
  18. return x*f;
  19. }
  20. const int N=1e5+10,INF=2147483647;
  21. int n,m,cnt,bary,ans,maxx,tot;
  22. bool vis[N];
  23. int l[N],r[N],siz[N],dis[N],bel[N],sum[N];
  24. int nxt[N<<1],to[N<<1],cst[N<<1],head[N];
  25. inline void get_siz(int u,int pre) {
  26. siz[u]=1;
  27. E(i,u) if((v=to[i])!=pre&&!vis[v])
  28. get_siz(v,u),siz[u]+=siz[v];
  29. }
  30. inline void get_dis(int u,int pre,int rt) {
  31. bel[u]=rt;
  32. E(i,u) if((v=to[i])!=pre) //不加!vis[v]
  33. dis[v]=dis[u]+cst[i],get_dis(v,u,rt);
  34. }
  35. inline void find_bary(int u,int pre) {
  36. int mx=0; siz[u]=1;
  37. E(i,u) if((v=to[i])!=pre&&!vis[v])
  38. find_bary(v,u),mx=max(mx,siz[v]),siz[u]+=siz[v];
  39. mx=max(mx,tot-siz[u]);
  40. if(!bary||mx<maxx) maxx=mx,bary=u;
  41. }
  42. inline void solve(int rt) {
  43. int mx=0,tar=-1;
  44. vis[rt]=1; dis[rt]=0; bel[rt]=rt;
  45. E(i,rt) dis[(v=to[i])]=cst[i],get_dis(v,rt,v);
  46. F(i,1,m) mx=max(mx,(sum[i]=dis[l[i]]+dis[r[i]]));
  47. ans=min(ans,mx);
  48. F(i,1,m) if(sum[i]==mx) {
  49. if(bel[l[i]]!=bel[r[i]]) return ;
  50. if((~tar)&&tar!=bel[l[i]]) return ;
  51. tar=bel[l[i]];
  52. }
  53. if(vis[tar]) return ;
  54. get_siz(tar,rt); tot=siz[tar];
  55. bary=maxx=0; find_bary(tar,rt);
  56. solve(bary);
  57. }
  58. int main() {
  59. n=read(),m=read(),ans=INF;
  60. F(i,1,n-1) {
  61. int a=read(),b=read(),c=read();
  62. add(a,b,c); add(b,a,c);
  63. }
  64. F(i,1,m) l[i]=read(),r[i]=read();
  65. tot=n; solve(1);
  66. printf("%d",ans);
  67. return 0;
  68. }

[luogu 4886] 快递员的更多相关文章

  1. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  2. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  3. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  4. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  5. Luogu 考前模拟Round. 1

    A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...

  6. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  7. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

  8. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

  9. Luogu 1962 斐波那契数列(矩阵,递推)

    Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...

随机推荐

  1. 使用markdown和gitblog搭建自己的博客

    GitBlog官网 GitBlog文档 Gitblog官方QQ群:84692078 GitBlog是一个简单易用的Markdown博客系统.它不须要数据库,没有管理后台功能,更新博客仅仅须要加入你写好 ...

  2. 3D数学读书笔记——多坐标系和向量基础

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24662453 第一个知识点 ...

  3. c/c++ 数据结构之位图(bitmap)具体解释

    1.  概述 位图(bitmap)是一种很经常使用的结构,在索引.数据压缩等方面有广泛应用. 本文介绍了位图的实现方法及其应用场景. 2. 位图实现 2014728101320" alt=& ...

  4. ADS-B显示终端6.8

    更新日志; 本次更新依旧主要注重是BUG修正. 1 改动鼠标移动时地图重绘的BUG 鼠标移动时地图即发生重绘,占用了CPU资源,修正后仅仅当鼠标点击选中对象或拖动对象时地图才会发生重绘.极大程度上节省 ...

  5. php debug二三事

    最近php相关项目遇到了一些问题,处理起来让人感觉挺有意思,寥寥记下. 1.php执行后常驻内存里,需要kill掉该进程再重启,才能让修改后的代码生效. 之前有一次组里小伙伴修改了一个长期后台进程运行 ...

  6. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

    此处共同拥有两段代码: 一. 这段代码比較全面,当中參考了github上的相关源代码. 能够说功能强大. //Dijkstra(迪杰斯特拉算法) #include <stdio.h> #i ...

  7. 【Java并发编程实战】—– AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了 ...

  8. @Component注解

    @component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="  " class="   "/>)泛指各 ...

  9. bzoj 4025 二分图 分治+并查集/LCT

    bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不 ...

  10. SQL SEVER 死锁// 解除死锁

    SQL SEVER 死锁 USE mastergo CREATE PROC killspid (@dbname VARCHAR (20))AS   BEGIN      DECLARE @sql NV ...