传送门

Solution

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

Code

// luogu-judger-enable-o2
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
#define E(i,u) for(register int i=head[u],v;i;i=nxt[i])
#define add(a,b,c) nxt[++cnt]=head[a],to[cnt]=b,cst[cnt]=c,head[a]=cnt
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin)),p1==p2?EOF:*p1++)
using namespace std; char buf[1<<22],*p1,*p2;
inline int read() {
int x=0,f=1;char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
} const int N=1e5+10,INF=2147483647;
int n,m,cnt,bary,ans,maxx,tot;
bool vis[N];
int l[N],r[N],siz[N],dis[N],bel[N],sum[N];
int nxt[N<<1],to[N<<1],cst[N<<1],head[N]; inline void get_siz(int u,int pre) {
siz[u]=1;
E(i,u) if((v=to[i])!=pre&&!vis[v])
get_siz(v,u),siz[u]+=siz[v];
} inline void get_dis(int u,int pre,int rt) {
bel[u]=rt;
E(i,u) if((v=to[i])!=pre) //不加!vis[v]
dis[v]=dis[u]+cst[i],get_dis(v,u,rt);
} inline void find_bary(int u,int pre) {
int mx=0; siz[u]=1;
E(i,u) if((v=to[i])!=pre&&!vis[v])
find_bary(v,u),mx=max(mx,siz[v]),siz[u]+=siz[v];
mx=max(mx,tot-siz[u]);
if(!bary||mx<maxx) maxx=mx,bary=u;
} inline void solve(int rt) {
int mx=0,tar=-1;
vis[rt]=1; dis[rt]=0; bel[rt]=rt;
E(i,rt) dis[(v=to[i])]=cst[i],get_dis(v,rt,v);
F(i,1,m) mx=max(mx,(sum[i]=dis[l[i]]+dis[r[i]]));
ans=min(ans,mx);
F(i,1,m) if(sum[i]==mx) {
if(bel[l[i]]!=bel[r[i]]) return ;
if((~tar)&&tar!=bel[l[i]]) return ;
tar=bel[l[i]];
}
if(vis[tar]) return ;
get_siz(tar,rt); tot=siz[tar];
bary=maxx=0; find_bary(tar,rt);
solve(bary);
} int main() {
n=read(),m=read(),ans=INF;
F(i,1,n-1) {
int a=read(),b=read(),c=read();
add(a,b,c); add(b,a,c);
}
F(i,1,m) l[i]=read(),r[i]=read();
tot=n; solve(1);
printf("%d",ans);
return 0;
}

[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. 2.6-NAT

    2.6-NAT     网络地址转换协议NAT(Network Address Translation):     交换和远程都要用,先上什么就放在哪一块讲,具体来说NAT还是属于远程的.       ...

  2. ctags的基本操作总结

    ctags用法 说明: a.       ctags能够分析程序生成tags文件: b.         生成的tags文件,能够用 vi -t 查找结构体,数据类型,函数名所在位置.非常方便: ct ...

  3. 605B. Lazy Student(codeforces Round 335)

    B. Lazy Student time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. tlplayer 全部平台版本号支持水印叠加

    tlplayer支持视频渲染前水印叠加.各个系统版本号相同支持. 联系方式:weinyzhou86@gmail.com QQ:514540005 版权全部,禁止转载. 公布自:http://blog. ...

  5. WCF学习笔记——配置服务引用

    WCF传过来的东西要序列化. 比如,在WCF服务中,象这么个方法 public IEnumerable<UserItem> GetUserList() 默认情况下,在客户端会调用,是这样: ...

  6. hibernate初步3

    事务和并发 1.事务概念 一组不可分割的操作,事务有如下属性(ACID 属性:Atomic Consistent Isolated Durable)(1)原子性---Atomic  事务的原子性指的是 ...

  7. Wireshark抓取RTP包,还原语音

    最近在做基于SIP的VoIP通信研究,使用Wireshark软件可以对网络流量进行抓包. VoIP使用RTP协议对语音数据进行传输,语音载荷都封装在RTP包里面.要对传输中的语音进行截获和还原,需要通 ...

  8. android 从assets和res中读取文件(转)

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  9. git常见冲突及解决办法

    1.内容冲突 产生冲突的原因:两个用户修改了同一个文件的同一块区域,git会报告内容冲突.我们常见的都是这种. 解决冲突的办法:编辑冲突文件,修改冲突. 例如:冲突文件test.c test.c发生冲 ...

  10. C# 获取当月有多少天

    int days = DateTime.DaysInMonth ( 2009, 9 ); int days = DateTime.DaysInMonth ( DateTime.Now.Year, Da ...