[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 统计> ...
随机推荐
- 180605-Linux下Crontab实现定时任务
Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...
- 使用httpClient获取请求cookie
package mytest; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValueP ...
- GameplayKit的GKStateMachine用法与实例
GKStateMachine 玩家进入GameScene场景中 -> 通过GKStateMachine进入到指定的游戏状态GKState 在GameScene场景中 -> 根据不同的逻辑调 ...
- 前端开发工程师 - 04.页面架构 - CSS Reset & 布局解决方案 & 响应式 & 页面优化 &规范与模块化
04.页面架构 第1章--CSS Reset 第2章--布局解决方案 居中布局 课堂交流区 水平列表的底部对齐 如图所示,一个水平排列的列表,每项高度都未知,但要求底部对齐,有哪些方法可以解决呢? & ...
- ubuntu networking 与 network-manager
刚遇到的坑,因为操作不当导致网络中断,于是手动配置了/etc/network/interfaces , 修复了系统之后发现ubuntu-desktop中的有线链接不见了,百度了一下说是networki ...
- Bitcoin: A Peer-to-Peer Electronic Cash System
Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto October 31, 2008 Abstract A purely p ...
- HDU 2494/POJ 3930 Elevator(模拟)(2008 Asia Regional Beijing)
Description Too worrying about the house price bubble, poor Mike sold his house and rent an apartmen ...
- canvas学习(二):渐变与曲线的绘制
canvas学习(二):渐变与曲线的绘制 一:createLinearGradient()线性渐变: 二:createLinearGradient() 放射状/圆形渐变: 三:createPatter ...
- 《C++面试知识点》
[动态内存] 1. 由内置指针管理的动态内存(即new和delete管理动态内存),直到被显式释放之前它都是存在的.假设该指针变量被销毁,那该内存将不会自动释放(即所谓的“内存泄漏”). 2. 可以用 ...
- 软件工程第四周作业-PSP
psp表格 类别 内容 开始时间 结束时间 中断时间 delta时间 学习 学习C# 10.6下午7:00 10.6下午8:00 - 60min 写代码 写主函数以及一些小的方法 10.7下午2:00 ...