题目:https://www.luogu.org/problemnew/show/P2680

因为是最长的时间最短,所以二分!

离线LCA可以知道路径长度。每次只看超过二分值的路径。

原本的想法是遍历一下每条超过二分值的路径,找出“去掉它就能使该路径合法”的那些边,打上标记,最后找到有k个标记的边就能行。

但有点不合适。不需要找出“……”的那些边,而把所有该路径上的边都打上标记,最后找到有k个标记的边的时候判断一下去掉它能不能行。

  这样就像均摊了复杂度一样。反正最后都得遍历树,可以那时多做一点、之前少做一点,使时间更好。

注意给边打标记是把它落在它下面的那个点上。而且是LCA的地方-2,和给点打标记不同。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int N=3e5+;
int n,m,head[N],xnt,cs[N],bh[N],l,r,mx,fa[N],hd[N],xt,dis[N],nw,mid,ans;
bool vis[N],flag;
struct Ques{
int dis,x,y,lca;
}a[N];
struct Edge{
int next,to,w;
Edge(int n=,int t=,int w=):next(n),to(t),w(w) {}
}edge[N<<],ed[N<<];
void add(int x,int y,int z)
{
edge[++xnt]=Edge(head[x],y,z);head[x]=xnt;
edge[++xnt]=Edge(head[y],x,z);head[y]=xnt;
}
void ad(int x,int y,int z)
{
ed[++xt]=Edge(hd[x],y,z);hd[x]=xt;
ed[++xt]=Edge(hd[y],x,z);hd[y]=xt;
}
int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}
bool cmp(Ques a,Ques b){return a.dis>b.dis;}
void tarjan(int cr,int f)
{
vis[cr]=;
for(int i=hd[cr],v;i;i=ed[i].next)
if(vis[v=ed[i].to])
{
int k=ed[i].w,lc=find(v);
a[k].lca=lc;a[k].dis=dis[cr]+dis[v]-*dis[lc];
mx=max(mx,a[k].dis);
}
for(int i=head[cr],v;i;i=edge[i].next)
if((v=edge[i].to)!=f)
{
bh[v]=i;
dis[v]=dis[cr]+edge[i].w;
tarjan(v,cr);fa[v]=cr;
}
}
void solve(int cr)
{
cs[a[cr].x]++;cs[a[cr].y]++;cs[a[cr].lca]-=;
}
int dfs(int cr,int f)
{
int ret=cs[cr];
for(int i=head[cr],v;i;i=edge[i].next)
if((v=edge[i].to)!=f)
{
ret+=dfs(v,cr);if(flag)return ;
}
if(ret==nw&&mx-edge[bh[cr]].w<=mid)flag=;
return ret;
}
int main()
{
scanf("%d%d",&n,&m);int x,y,z;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);add(x,y,z);
fa[i]=i;
}
fa[n]=n;
for(int i=;i<=m;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);ad(a[i].x,a[i].y,i);
}
tarjan(,);sort(a+,a+m+,cmp);r=mx;
while(l<=r)
{
mid=((l+r)>>);memset(cs,,sizeof cs);
for(nw=;nw<=m&&a[nw].dis>mid;nw++)solve(nw);
nw--;flag=;dfs(,);
if(flag)ans=mid,r=mid-;
else l=mid+;
}
printf("%d",ans);
return ;
}

洛谷 2680 (NOIp2015) 运输计划的更多相关文章

  1. NOIP2015 D2T3 洛谷2680 BZOJ4326 运输计划 解题报告

    前言:个人认为这是历年NOIP中比较简单的最后一题了,因此将自己的思路与大家分享. 题目大意: 给一棵无根树,给出m条路径.允许将树上的一条边的权值改为0.求m条路径长度最大值的最小值.n,m< ...

  2. 【洛谷P2680】运输计划

    题目链接 题目大意: 一棵\(n\)个点的带边权的数,给定\(m\)条树上两点间的路径,现在你可以让树上任意一条边的权值变为零, 问如何选边使得\(m\)条路径中边权和最大的路径的边权和最小 \(\m ...

  3. bzoj 4326: NOIP2015 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个 ...

  4. NOIP2015 运输计划(bzoj4326)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 886  Solved: 574[Submit][Status] ...

  5. [BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划

    [BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划 试题描述 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n− ...

  6. [NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组

    [NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有 ...

  7. NOIP2015 运输计划(二分+LCA+差分)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 308  Solved: 208[Submit][Status] ...

  8. 数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划

    2109. [NOIP2015] 运输计划 ★★★   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:1 s   内存限制:256 MB [题目描 ...

  9. 洛谷 P1967 货车运输

    洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...

随机推荐

  1. 第二篇:Spark SQL Catalyst源码分析之SqlParser

    /** Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责. 本文先从入口 ...

  2. JSP web.xml <jsp-config>标签使用详解

    <jsp-config> 包括 <taglib> 和 <jsp-property-group> 两个子元素.其中<taglib> 元素在JSP 1.2  ...

  3. dataframe 列名重新排序

    在用list包含多个dict的模式生成dataframe时,由于dict的无序性,而uci很多数据的特征名直接是1,2,3...,生成的dataframe和原生的不一样, 为了方便观看和使用,我们将其 ...

  4. 谈谈你对Glide和Picasso他们的对比的优缺点

    1.Picasso和Glide的withi后面的参数不同 Picasso.with(这里只能传入上下文)     . Glide.with,后面可以传入上下文,activity实例,FragmentA ...

  5. 分享知识-快乐自己:都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事

    都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果: import java.lang.reflect.Field ...

  6. MS Project 如何删除前置任务

  7. Android性能优化系列总篇

    目前性能优化专题已完成以下部分: 性能优化总纲——性能问题及性能调优方式 性能优化第四篇——移动网络优化 性能优化第三篇——Java(Android)代码优化 性能优化第二篇——布局优化 性能优化第一 ...

  8. Js中分号使用总结

    作者:尤雨溪链接:https://www.zhihu.com/question/20298345/answer/49551142来源:知乎著作权归作者所有,转载请联系作者获得授权. 没有应该不应该,只 ...

  9. Arcgis for Javascript实现两个地图的联动

    今天在看天地图的时候,有一个多时相的地图显示功能,感觉很好玩,作为技术控的我晚上十点下班到家便是快十一点了,本来应该是睡觉了,但是,激动地心情不能平静,哎,算了,本着不熬夜的程序员不是好程序员的原则, ...

  10. 机器视觉:Convolutional Neural Networks, Receptive Field and Feature Maps

    CNN 大概是目前 CV 界最火爆的一款模型了,堪比当年的 SVM.从 2012 年到现在,CNN 已经广泛应用于CV的各个领域,从最初的 classification,到现在的semantic se ...