4326: NOIP2015 运输计划

Time Limit: 30 Sec  Memory Limit: 128 MB
Submit: 308  Solved: 208
[Submit][Status][Discuss]

Description

公元 2044 年,人类进入了宇宙纪元。L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球。小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之间不会产生任何干扰。为了鼓励科技创新, L 国国王同意小 P 的物流公司参与 L 国的航道建设,即允许小P 把某一条航道改造成虫洞,飞船驶过虫洞不消耗时间。在虫洞的建设完成前小 P 的物流公司就预接了 m 个运输计划。在虫洞建设完成后,这 m 个运输计划会同时开始,所有飞船一起出发。当这 m 个运输计划都完成时,小 P 的物流公司的阶段性工作就完成了。如果小 P 可以自由选择将哪一条航道改造成虫洞, 试求出小 P 的物流公司完成阶段性工作所需要的最短时间是多少?

 

Input

第一行包括两个正整数 n,m,表示 L 国中星球的数量及小 P 公司预接的运输计划的数量,星球从 1 到 n 编号。接下来 n−1 行描述航道的建设情况,其中第 i 行包含三个整数 ai,bi 和 ti,表示第 i 条双向航道修建在 ai 与 bi 两个星球之间,任意飞船驶过它所花费的时间为 ti。数据保证 1≤ai,bi≤n 且 0≤ti≤1000。接下来 m 行描述运输计划的情况,其中第 j 行包含两个正整数 uj 和 vj,表示第 j 个运输计划是从 uj 号星球飞往 vj号星球。数据保证 1≤ui,vi≤n

 

Output

输出文件只包含一个整数,表示小 P 的物流公司完成阶段性工作所需要的最短时间。

 

Sample Input

6 3
1 2 3
1 6 4
3 1 7
4 3 6
3 5 5
3 6
2 5
4 5

Sample Output

11

HINT

将第 1 条航道改造成虫洞: 则三个计划耗时分别为:11,12,11,故需要花费的时间为 12。
将第 2 条航道改造成虫洞: 则三个计划耗时分别为:7,15,11,故需要花费的时间为 15。
将第 3 条航道改造成虫洞: 则三个计划耗时分别为:4,8,11,故需要花费的时间为 11。
将第 4 条航道改造成虫洞: 则三个计划耗时分别为:11,15,5,故需要花费的时间为 15。
将第 5 条航道改造成虫洞: 则三个计划耗时分别为:11,10,6,故需要花费的时间为 11。
故将第 3 条或第 5 条航道改造成虫洞均可使得完成阶段性工作的耗时最短,需要花费的时间为 11。
 
 

【思路】

   二分+LCA+差分

先求出所有查询的路长,时间为O(mlogn)。题目所求为修改后的最大查询路最小,考虑二分该最大路值ML。对于所有长度超过ML的路径求交,记录最大查询路为mx,只要我们求出这些路径的最大公共边(交)mxe,通过判断mx-mxe与ML就可调整区间。

如何求交? 差分。所谓差分就是将一个对区间的操作变为对区间端点的操作。将查分推广到树上。每个结点带个cnt,对于路径(u,v),cnt[u]++,cnt[v]++,cnt[lca(u,v)]-=2,在树上统计cnt[x]=sigma{cnt[son]},这样只要满足cnt[x]==1的边就在这条路上,满足cnt[x]==tot的边就在路径的交上。

总的时间为O(mlogn+(m+n)logL)

【代码】

 #include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; const int N = *1e5+;
struct Edge{ int v,w; }; int n,m;
int u[N],v[N],w[N],lca[N],dist[N],val[N];
vector<Edge> g[N]; void read(int& x) {
char c=getchar(); int f=; x=;
while(!isdigit(c)) {if(c=='-')f=-; c=getchar();}
while(isdigit(c)) x=x*+c-'',c=getchar();
x*=f;
} int siz[N],fa[N],son[N],top[N],dep[N],dis[N];
void dfs1(int u) {
siz[u]=; son[u]=;
for(int i=;i<g[u].size();i++) {
int v=g[u][i].v;
if(v!=fa[u]) {
fa[v]=u; dep[v]=dep[u]+;
dis[v]=dis[u]+g[u][i].w;
dfs1(v);
siz[u]+=siz[v];
if(siz[v]>siz[son[u]]) son[u]=v;
}
}
}
void dfs2(int u,int tp) {
top[u]=tp;
if(son[u]) dfs2(son[u],tp);
for(int i=;i<g[u].size();i++) {
int v=g[u][i].v;
if(v!=fa[u]&&v!=son[u]) dfs2(v,v);
}
}
int LCA(int u,int v) {
while(top[u]!=top[v]) {
if(dep[top[u]]<dep[top[v]]) swap(u,v);
u=fa[top[u]];
}
return dep[u]<dep[v]? u:v;
} int tot,mx,mxe,cnt[N];
int find_mxe(int u) {
for(int i=;i<g[u].size();i++) {
int v=g[u][i].v;
if(v!=fa[u]) cnt[u]+=find_mxe(v);
}
if(cnt[u]==tot) mxe=max(mxe,val[u]);
int tmp=cnt[u]; cnt[u]=;
return tmp;
}
bool can(int ML) {
tot=; mx=mxe=;
FOR(i,,m) if(dist[i]>ML){
tot++; mx=max(mx,dist[i]);
cnt[u[i]]++,cnt[v[i]]++,cnt[lca[i]]-=;
}
find_mxe();
return mx-mxe<=ML;
} int main() {
//freopen("transport.in","r",stdin);
//freopen("transport.out","w",stdout);
read(n),read(m);
FOR(i,,n-) {
read(u[i]),read(v[i]),read(w[i]);
g[u[i]].push_back((Edge){v[i],w[i]});
g[v[i]].push_back((Edge){u[i],w[i]});
}
dfs1(),dfs2(,);
FOR(i,,n-) {
if(dep[u[i]]<dep[v[i]]) swap(u[i],v[i]);
val[u[i]]=w[i];
}
int x,y,L=,R=,M;
FOR(i,,m) {
read(x),read(y);
dist[i]=dis[x]+dis[y]-*dis[lca[i]=LCA(x,y)];
R=max(R,dist[i]); u[i]=x,v[i]=y;
}
R++;
while(L<R) {
M=(L+R)>>;
if(can(M)) R=M; else L=M+;
}
printf("%d",L);
return ;
}

PS:bzoj不会栈溢 233

NOIP2015 运输计划(二分+LCA+差分)的更多相关文章

  1. BZOJ 4326 NOIP2015 运输计划 (二分+树上差分)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1930  Solved: 1231[Submit][Statu ...

  2. 洛谷 P2680 运输计划-二分+树上差分(边权覆盖)

    P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条 ...

  3. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  4. [NOIP2015]运输计划(树上差分+LCA+二分)

    Description 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球. 小 P 掌管 ...

  5. BZOJ 4326: NOIP2015 运输计划(二分,树上差分)

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1945  Solved: 1243[Submit][Status][Discuss] Descript ...

  6. 【bzoj4326】[NOIP2015]运输计划 二分答案+LCA

    题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...

  7. P2680 运输计划[二分+LCA+树上差分]

    题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n−1 条航道连通了 LL 国的所有星球. 小 ...

  8. vijos 运输计划 - 二分答案 - 差分 - Tarjan

    Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...

  9. Luogu P2680 运输计划(二分+树上差分)

    P2680 运输计划 题意 题目背景 公元\(2044\)年,人类进入了宇宙纪元. 题目描述 公元\(2044\)年,人类进入了宇宙纪元. \(L\)国有\(n\)个星球,还有\(n-1\)条双向航道 ...

  10. P2680 运输计划 二分+树上差分

    又咕咕了几天\(QwQ\) 思路:二分+树上差分 提交:\(\geq5\)次 错因:\(lca\)写错+卡了很久常数(哪位大佬帮我康康,有更好的写法请指出\(QwQ\)) 题解: 我们先将原问题转化为 ...

随机推荐

  1. 《Effective Java》读书笔记

    一.引言 1.几条基本规则:(清晰性和简洁性最为重要) 模块的用户永远也不应该被模块的行为所迷惑(那样就不清晰了),模块要尽可能小,但又不能太小 代码应该被重用,而不是被拷贝 模块之间的依赖性应该尽可 ...

  2. 最完美解决Nginx部署ThinkPHP项目的办法

    网上通用解决方法的配置如下: server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给T ...

  3. PHPCMS如何实现后台访问限制?

    修改phpcms 后台管理路径,可以有效的防止因为程序漏洞,或者是服务器安全问题所带来的 phpcms系统管理权限被黑客获取 文件路径:/caches/config/system.php 修改:'ad ...

  4. opengl混合效果

    效果如下图:

  5. maven之ssh项目搭建

    1:新建maven-archetupe-webapp项目 2:web.xml配置文件如下 <?xml version="1.0" encoding="UTF-8&q ...

  6. JSP页面之${fn:}内置函数

    函数列表: 函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchStrin ...

  7. net.sf.json日期类型格式化输出

    net.sf.json 日期类型格式化输出 Date, Timestamp ; 编写工具类 package cn.jorcen.commons.util; import java.text.DateF ...

  8. Memcached总结四:用ava程序连接memcached进行操作

    1. Memcached的Java环境设置 需要下载spymemcached-2.10.3.jar,并把这个jar放到java程序的classpath中才能使用memcached. 在下面的程序,假设 ...

  9. 李洪强漫谈iOS开发[C语言-019]-断点调试

  10. Yii url createUrl redirect相关

    一篇文章: 在yii中明明白白生成网址: 在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,act ...