[NOIP 2005] 运输计划
这是一道假的图论
思维难度很低,代码量偏高
就是一道板子+二分
树上差分就AC了
注意卡常即可
二分枚举答案x,为时间长度
将每一个长度大于x的计划链长记录下来(有几个,总需要减少多少长度)
在树上跑一跑即可
树上差分就将u,vv权值+1,lca(u,v)-2即可
dp[i]:为子树权值和,也是i上面道路有几条路径覆盖
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read()
{
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int n,m;
struct node{
int u,v,w,nex;
}x[];
int deep[],vt[],dis[],fa[][],head[],cnt=;
void add(int u,int v,int w)
{
x[cnt].u=u,x[cnt].v=v,x[cnt].w=w,x[cnt].nex=head[u],head[u]=cnt++;
}
void dfs(int f,int fath,int DIS)
{
deep[f]=deep[fath]+;
dis[f]=DIS;
fa[f][]=fath;
for(int i=;(<<i)<=deep[f];i++) fa[f][i]=fa[fa[f][i-]][i-];
for(int i=head[f];i;i=x[i].nex)
{
if(x[i].v==fath) continue;
vt[x[i].v]=x[i].w;
dfs(x[i].v,f,DIS+x[i].w);
}
return;
}
int lca(int u,int v)
{
if(deep[u]<deep[v]) swap(u,v);
for(int i=;i>=;i--)
if(deep[u]-(<<i)>=deep[v]) u=fa[u][i];
if(u==v) return u;
for(int i=;i>=;i--)
{
if(fa[u][i]==fa[v][i]) continue;
u=fa[u][i],v=fa[v][i];
}return fa[u][];
}
struct node1{
int x,y,lca,dis;
}s[];
int l,r,mid,dp[];
void dp_tree(int f,int fath)
{
for(int i=head[f];i;i=x[i].nex)
{
if(x[i].v==fath) continue;
dp_tree(x[i].v,f);
dp[f]+=dp[x[i].v];
}
return;
}
bool check(int st)
{
memset(dp,,sizeof(dp));
int tot=,maxn=;
for(int i=;i<=m;i++)
{
if(s[i].dis>st)
{
tot++;
dp[s[i].x]++,dp[s[i].y]++,dp[s[i].lca]-=;
maxn=max(maxn,s[i].dis-st);
}
}
dp_tree(,);
for(int i=;i<=n;i++)
if(dp[i]==tot&&vt[i]>=maxn) return ;
return ;
}
int data=<<-;
int main()
{
n=read(),m=read();
for(int i=;i<n;i++)
{
int u=read(),v=read(),w=read();
add(u,v,w),add(v,u,w);
}
dfs(,,);
for(int i=;i<=m;i++)
{
s[i].x=read(),s[i].y=read();
s[i].lca=lca(s[i].x,s[i].y);
s[i].dis=dis[s[i].x]+dis[s[i].y]-(dis[s[i].lca]<<);
r=max(r,s[i].dis);
}
while(l<=r)
{
mid=l+r>>;
if(check(mid)) data=min(data,mid),r=mid-;
else l=mid+;
}
printf("%d",data);
}
[NOIP 2005] 运输计划的更多相关文章
- 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运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...
- 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 统计> ...
随机推荐
- Windows运行机理——主程序—WinMain
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 在windows 操作系统下,用C 或者C++来编写MS-DOS 应用 ...
- pycharm 3.4 亲测可使用到2019年2月的注册码,要用者从速
注册码: D87IQPUU3Q-eyJsaWNlbnNlSWQiOiJEODdJUVBVVTNRIiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1l ...
- sqlserver错误126解决方法
是不是很尴尬! 华丽的分割线下便是解决方法: 1.打开sqlserver配置管理器. 2.选择sqlserver网络配置,并禁用VIA协议确定保存. 3.在服务里面启动[SQL Server (SQL ...
- git 从头开始
下载安装git 打开git,输入以下命令,引号内的为你自己的名字和邮箱 git config --global user.name "Your Name"git config -- ...
- Java 消息对列
ActiveMQ入门实例 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5. ...
- 简单说明hadoop集群运行三种模式和配置文件
Hadoop的运行模式分为3种:本地运行模式,伪分布运行模式,集群运行模式,相应概念如下: 1.独立模式即本地运行模式(standalone或local mode)无需运行任何守护进程(daemon) ...
- CPU设计学习-流水线
各种名词 标量流水线 超级流水线 超标量流水线与多发射技术 经典五级流水线 IF |Instruction Fetch,取指 ID |Instruction Decode,译码 EX |Execute ...
- tensorflow学习笔记(4)-学习率
tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...
- Asp.net之数组应用
string[] abc=new string[8]{"1","2","3","4","1",&qu ...
- 【转】Angular.js VS. Ember.js:谁将成为Web开发的新宠?
本文源自于Quora网站的一个问题,作者称最近一直在为一个新的Rails项目寻找一个JavaScript框架,通过筛选,最终纠结于 Angular.js和 Ember.js. 这个问题获得了大量的关注 ...