传送门

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. POJ 1128 Frame Stacking(拓扑排序&#183;打印字典序)

    题意  给你一些矩形框堆叠后的鸟瞰图  推断这些矩形框的堆叠顺序  每一个矩形框满足每边都至少有一个点可见  输入保证至少有一个解 按字典序输出全部可行解 和上一题有点像  仅仅是这个要打印全部的可行 ...

  2. HDOJ 2196 Computer 树的直径

    由树的直径定义可得,树上随意一点到树的直径上的两个端点之中的一个的距离是最长的... 三遍BFS求树的直径并预处理距离....... Computer Time Limit: 1000/1000 MS ...

  3. 【Git笔记】怎样在同主机同账户下实现多个gitlab帐号管理各自的remote repo

    我们可能会遇到以下的场景: 1)多人共用同一台Linux开发机,该开发机仅仅有一个共用的work帐号,非常多人都用这个帐号登录主机进行日常开发. 2)该work帐号下统一安装了gitclient供多人 ...

  4. media type

    https://www.sitepoint.com/mime-types-complete-list/ application/base64 https://github.com/dotnet/doc ...

  5. SqlServer还原步骤

    SqlServer还原步骤 2009-09-05 10:32:12|  分类: 数据库|字号 订阅     1 . 删除原有数据库 新建数据库  hywlxt 2. 在master 中新建存储过程 k ...

  6. bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1800   https://www.luogu.org/problemnew/show/P21 ...

  7. ecshop类的解析2 json_encode和json_decode的具体实现

    在看ecshop源码时,看到json这个类,研究了一下,它是为了兼容低版本php而做出的类,是对php的数据和json转换时使用的. encode和decode函数是对json的操作,对应json_e ...

  8. [Apple开发者帐户帮助]二、管理你的团队(1)邀请团队成员

    组织可以选择向其开发团队添加其他人员.如果您已加入Apple开发者计划,您将在App Store Connect中管理团队成员.有关详细信息,请转到在App Store Connect帮助中添加用户. ...

  9. python-day4 运算符,if判断, for循环

    1.运算符 算术运算符 +   -    *    /    % 赋值运算符 =   +=  -= 比较运算符 ==    <   <=    >    >=    != 逻辑 ...

  10. .Net Core(二) 下

    接上面 http://www.cnblogs.com/xcodevs/p/5584218.html 在解决方案浏览器中,右击 Controllers 目录.选择添加>新建项.选择Web API控 ...