NOIP 2015运输计划
题目背景
公元 2044 年,人类进入了宇宙纪元。
题目描述
L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球。
小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物
流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道 是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之 间不会产生任何干扰。
为了鼓励科技创新,L 国国王同意小 P 的物流公司参与 L 国的航道建设,即允许小 P 把某一条航道改造成虫洞,飞船驶过虫洞不消耗时间。
在虫洞的建设完成前小 P 的物流公司就预接了 m 个运输计划。在虫洞建设完成后, 这 m 个运输计划会同时开始,所有飞船一起出发。当这 m 个运输计划都完成时,小 P 的 物流公司的阶段性工作就完成了。
如果小 P 可以自由选择将哪一条航道改造成虫洞,试求出小 P 的物流公司完成阶段 性工作所需要的最短时间是多少?
输入输出格式
输入格式:
输入文件名为 transport.in。
第一行包括两个正整数 n、m,表示 L 国中星球的数量及小 P 公司预接的运输计划的数量,星球从 1 到 n 编号。
接下来 n-1 行描述航道的建设情况,其中第 i 行包含三个整数 ai, bi 和 ti,表示第
i 条双向航道修建在 ai 与 bi 两个星球之间,任意飞船驶过它所花费的时间为 ti。
接下来 m 行描述运输计划的情况,其中第 j 行包含两个正整数 uj 和 vj,表示第 j个 运输计划是从 uj 号星球飞往 vj 号星球。
输出格式:
输出 共1行,包含1个整数,表示小P的物流公司完成阶段性工作所需要的最短时间。
输入输出样例
6 3
1 2 3
1 6 4
3 1 7
4 3 6
3 5 5
3 6
2 5
4 5
11
说明
所有测试数据的范围和特点如下表所示

请注意常数因子带来的程序效率上的影响。
提供友情暴力+正解分析链接:http://www.cnblogs.com/NaVi-Awson/p/7445989.html
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Messi
{
int next,dis,to;
}edge[];
struct ed
{
int p,q,s;
}plan[];
int head[],num,son[],size[],fa[],dep[],top[],pos[],tot,sondis[],sgm[];
int c1[],c2[],n,m;
bool cmp(ed a,ed b)
{
return (a.s<b.s);
}
void add(int u,int v,int dis)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
edge[num].dis=dis;
}
void dfs1(int u,int pa,int depth)
{
son[u]=;
size[u]=;
fa[u]=pa;
dep[u]=depth;
for (int j=head[u]; j; j=edge[j].next)
{
int v=edge[j].to;
if (v!=pa)
{
dfs1(v,u,depth+);
size[u]+=size[v];
if (size[v]>size[son[u]]) son[u]=v,sondis[u]=edge[j].dis;
}
}
}
void dfs2(int u,int tp,int dis)
{
top[u]=tp;
pos[u]=++tot;
sgm[tot]=dis;
if (son[u]) dfs2(son[u],tp,sondis[u]);
for (int j=head[u]; j; j=edge[j].next)
if (edge[j].to!=son[u]&&edge[j].to!=fa[u])
{
dfs2(edge[j].to,edge[j].to,edge[j].dis);
}
}
void build(int rt,int l,int r)
{
if (l==r)
{
c1[rt]=sgm[l];
return;
}
int mid=(l+r)/;
build(rt*,l,mid);
build(rt*+,mid+,r);
c1[rt]=c1[rt*]+c1[rt*+];
}
int ask(int rt,int l,int r,int L,int R)
{int x=;
if (l>=L&&r<=R)
{
return c1[rt];
}
int mid=(l+r)/;
if (L<=mid) x+=ask(rt*,l,mid,L,R);
if (R>mid) x+=ask(rt*+,mid+,r,L,R);
return x;
}
int query(int x,int y)
{
int ans=;
while (top[x]!=top[y])
{
if (dep[top[x]]<dep[top[y]]) swap(x,y);
ans+=ask(,,n,pos[top[x]],pos[x]);
x=fa[top[x]];
}
if (dep[x]>dep[y]) swap(x,y);
if (x!=y) ans+=ask(,,n,pos[x]+,pos[y]);
return ans;
}
void update(int L,int R)
{
c2[L]+=;
c2[R+]-=;
}
void change(int x,int y)
{
while (top[x]!=top[y])
{
if (dep[top[x]]<dep[top[y]]) swap(x,y);
update(pos[top[x]],pos[x]);
x=fa[top[x]];
}
if (dep[x]>dep[y]) swap(x,y);
if (x!=y) update(pos[x]+,pos[y]);
}
bool check(int x)
{int i,cnt=;
memset(c2,,sizeof(c2));
for (i=m;i>=;i--)
if (plan[i].s>x)
change(plan[i].p,plan[i].q),cnt++;
else break;
for (i=;i<=n;i++)
{
c2[i]+=c2[i-];
}
for (i=;i<=n;i++)
{
if (cnt==c2[pos[i]]&&plan[m].s-sgm[pos[i]]<=x) return true;
}
return false;
}
int main()
{int i,x,y,z,maxz=,l,r;
cin>>n>>m;
for (i=;i<=n-;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
maxz=max(maxz,z);
}
dfs1(,,);
dfs2(,,);
build(,,n);
for (i=;i<=m;i++)
{
scanf("%d%d",&plan[i].p,&plan[i].q);
plan[i].s=query(plan[i].p,plan[i].q);
}
sort(plan+,plan++m,cmp);
r=plan[m].s;l=max(,r-maxz);
while (l<r)
{
int mid=(l+r)/;
if (check(mid)) r=mid;
else l=mid+;
}
cout<<l;
}
NOIP 2015运输计划的更多相关文章
- 4632 NOIP[2015] 运输计划
4632 NOIP[2015] 运输计划 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 公元 2044 ...
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
[NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...
- Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分)
Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之 ...
- cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分
2109. [NOIP 2015] 运输计划 ★★★☆ 输入文件:transport.in 输出文件:transport.out 简单对比时间限制:3 s 内存限制:256 MB [题 ...
- NOIP[2015] 运输计划
传送门 题目描述 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球 ...
- [noip 2015]运输计划 [LCA][树链剖分]
用了luogu上的题目描述 题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的 ...
- NOIP[2015] 运输计划(codevs 4632)
题目描述 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P ...
- noip 2015 运输计划 (lca+二分)
/* 95 最后一个点T了 qian lv ji qiong 了 没学过树剖 听chx听xzc说的神奇的方法 Orz 首先求出每个计划的路径长度 这里写的倍增 然后二分答案 对于每个ans 统计> ...
- 题解——洛谷 P2680 NOIP提高组 2015 运输计划
树上差分加上二分答案 详细题解待填坑 #include <cstdio> #include <algorithm> #include <cstring> using ...
随机推荐
- 团队项目7——团队冲刺(beta版本)
beta版本冲刺计划安排:http://www.cnblogs.com/ricardoCYF/p/8018413.html 12.06:http://www.cnblogs.com/ricardoCY ...
- Android实验报告
实验名称:Android程序设计 实验时间:2017.5.24 实验人员:20162309邢天岳(结对同学20162313苑洪铭) 实验目的:使用android stuidio开发工具进行基本安卓软件 ...
- 再议Python协程——从yield到asyncio
协程,英文名Coroutine.前面介绍Python的多线程,以及用多线程实现并发(参见这篇文章[浅析Python多线程]),今天介绍的协程也是常用的并发手段.本篇主要内容包含:协程的基本概念.协程库 ...
- 关于移动web教程免费发布
各位老铁大家好,最近经历了太多太多,精力一直不能集中做自己愿意做的事情. 移动Web课程一开始设置收费10块,其实本意是让大家感觉有支出,就会相对珍惜好好学习,但是发现收费把大部分人挡在门外,现在恢复 ...
- Windows 的Apache支持SSI配置
配置SSI什么是shtml? 使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或 ...
- SpringBoot项目如何进行打包部署
springboot的打包方式有很多种.有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的.这里主要介绍如何打成jar进行部署.不推荐用war,因为spring ...
- (干货)微信小程序之上传图片和图片预览
这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...
- Hadoop2.6.0实践:001 伪分布式环境搭建
##################### Centos6.4VM_01_os.rar ################################################准备工作/opt ...
- C# 读取网页JSON数据
场景描述: 公司和别的系统需要对接,现在对方提供一个网址,数据都是json字符串,我需要对json数据进行处理. 提供的json数据如下格式 一.读取网址中的json数据 public string ...
- 通过wget工具下载指定文件中的URLs对应的资源并保存到指定的本地目录中去并进行文件完整性与可靠性校验
创建URLs文件在终端输入cd target_directory回车,便把当前文件夹切换到了目标文件夹target_directory,此后创建的文件都会丢它里面在终端输入cat > URLs回 ...