[CTSC2017]网络

dp[i]：链上一个点往下延伸的最大深度

suma,sumb移项，所以4个不等式右边都要取最大的（任意转化为最值）

```#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}

namespace Miracle{
const int N=1e5+;
const ll inf=0x3f3f3f3f3f3f3f3f;
int n;
struct node{
int nxt,to;
int val;
}e[*N];
int hd[N],cnt;
e[++cnt].nxt=hd[x];
e[cnt].to=y;
e[cnt].val=z;
hd[x]=cnt;
}
ll ans,len;
ll L,R;
int mem[N],fa[N],vf[N];
int on[N];
ll sum[N];
struct po{
ll v;
int id;
po(){}
po(ll vv,int dd){
v=vv;id=dd;
}
};
struct qs{
po p[N];
int sz;
void push(ll v,int d){
p[++sz]=po(v,d);
}
void clear(){
sz=;
}
il po &operator[](const int &x){return p[x];}
il const po &operator[](const int &x) const {return p[x];}
}su,sd,up,dw;//member's number is num

bool cmpu(po a,po b){//sheng
return a.v<b.v;
}
bool cmpd(po a,po b){//jiang
return a.v>b.v;
}
int st,nd,num;
ll mx;
struct tr{
ll f[N];
void clear(){
memset(f,-0x3f,sizeof f);
}
void ins(int x,ll v){
for(;x<=n;x+=x&(-x)) f[x]=max(f[x],v);
}
ll query(int x){
ll ret=-inf;
for(;x;x-=x&(-x)) ret=max(ret,f[x]);
return ret;
}
}t[];
//t[0]:dp-sum
//t[1]:dp+sum
void dfs1(int x,ll dis){
if(dis>mx) {
mx=dis;st=x;
}
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa[x]) continue;
fa[y]=x;
dfs1(y,dis+e[i].val);
}
}
void dfs2(int x,ll dis){
if(dis>mx){
mx=dis;nd=x;
}
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa[x]) continue;
fa[y]=x;
vf[y]=e[i].val;
dfs2(y,dis+e[i].val);
}
}
ll dp[N];
void fin(int x){
dp[x]=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa[x]||on[y]) continue;
fa[y]=x;
fin(y);
L=max(L,dp[x]+dp[y]+e[i].val);
dp[x]=max(dp[x],dp[y]+e[i].val);
}
}
struct pointer{
int ptr;
ll lim;
void clear(){
ptr=;lim=-inf;
}
void upda(ll v){
lim=max(lim,v);
}
}p[];
pair<int,int>tp;
void con(int l,int r){
tp.fi=max(tp.fi,l);
tp.se=min(tp.se,r);
}
bool che(ll mid){
///warning!!!! dp[mem[...[].id]]
t[].clear();t[].clear();
for(reg i=;i<=;++i) p[i].clear();
int ptr=;
for(reg j=;j<=num;++j){
while(ptr<num&&dw[ptr+].v+up[j].v>mid) {
++ptr;
t[].ins(dw[ptr].id,dw[ptr].v);
t[].ins(dw[ptr].id,sum[dw[ptr].id]+dp[mem[dw[ptr].id]]);
}
if(ptr){
ll djss=dp[mem[up[j].id]]-sum[up[j].id],djas=up[j].v;
ll diss=t[].query(up[j].id-),dias=t[].query(up[j].id-);
p[].upda(len-mid+djss+dias);
p[].upda(len-mid+diss+djas);
p[].upda(len-mid+dias+djas);
p[].upda(len-mid+diss+djss);
}
}
p[].ptr=p[].ptr=;
for(reg b=;b<=num;++b){
while(p[].ptr<=num&&su[p[].ptr].v-p[].lim<su[b].v) ++p[].ptr;
while(p[].ptr<num&&su[p[].ptr+].v+p[].lim<=su[b].v) ++p[].ptr;
while(p[].ptr<num&&-sd[p[].ptr+].v+p[].lim<=su[b].v) ++p[].ptr;
while(p[].ptr<=num&&-sd[p[].ptr].v-p[].lim<su[b].v) ++p[].ptr;
tp.fi=;tp.se=num;
con(p[].ptr,num);
con(,p[].ptr);
con(num-p[].ptr+,num);
con(,num-p[].ptr+);
if(tp.fi<=tp.se) return true;
}
return false;
///warning!!!! dp[mem[...[].id]]
}
void clear(){
ans=inf;num=;st=nd=;
memset(sum,,sizeof sum);
memset(fa,,sizeof fa);
memset(vf,,sizeof vf);
memset(on,,sizeof on);
memset(hd,,sizeof hd);
su.clear();sd.clear();up.clear();dw.clear();
cnt=;
L=,R=;
}
int main(){
while(){
clear();
rd(n);rd(len);
if(n==&&len==) break;
mx=-;
int x,y,z;
for(reg i=;i<n;++i){
rd(x);rd(y);rd(z);
}
if(n==){
puts("");continue;
}
dfs1(,);
fa[st]=;
mx=-;
dfs2(st,);
/*RRR*/ R=mx;
num=;
x=nd;
while(x){
mem[++num]=x;
on[x]=;
sum[num]=sum[num-]+vf[mem[num-]];
x=fa[x];
}
memset(fa,,sizeof fa);
/*LLL*/ for(reg i=;i<=num;++i){
fin(mem[i]);
}

for(reg i=;i<=num;++i){
su.push(sum[i],i);
sd.push(sum[i],i);
up.push(dp[mem[i]]+sum[i],i);
dw.push(dp[mem[i]]-sum[i],i);
}
sort(su.p+,su.p+num+,cmpu);
sort(sd.p+,sd.p+num+,cmpd);
sort(up.p+,up.p+num+,cmpu);
sort(dw.p+,dw.p+num+,cmpd);

while(L<=R){
ll mid=(L+R)/;
if(che(mid)){
ans=mid;R=mid-;
}else L=mid+;
}
printf("%lld\n",ans);
}
return ;
}

}
signed main(){
Miracle::main();
return ;
}

/*
Author: *Miracle*
*/```

## [CTSC2017]网络的更多相关文章

1. BZOJ 4901 [CTSC2017]网络

题解: 只会O(n log^2 n) O(n log n)先留坑 不开long long 0 分!!!! #include<iostream> #include<cstdio> ...

2. uoj #298. 【CTSC2017】网络

#298. [CTSC2017]网络 一个一般的网络系统可以被描述成一张无向连通图.图上的每个节点为一个服务器,连接服务器与服务器的数据线则看作图上的一条边,边权为该数据线的长度.两个服务器之间的通讯 ...

3. 【loj2262】【CTSC2017】网络

题目 一颗\(n\)个点的树,求加入一条边点之后两点间最长距离的最小值 : \(n \le 100000\) ; 题解 首先加入边的两个端点一定在直径上面,先\(dfs\)拎出直径来讨论(下标只代表直 ...

4. Angular2入门系列教程7-HTTP（一）-使用Angular2自带的http进行网络请求

上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

5. Android请求网络共通类——Hi_博客 Android App 开发笔记

今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

6. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

7. Virtual Box配置CentOS7网络（图文教程）

之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

8. 前端网络、JavaScript优化以及开发小技巧

一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

9. 猫哥网络编程系列：HTTP PEM 万能调试法

注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

## 随机推荐

1. Android stdio Apktool源码编译

Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

2. linux c数据库备份第五版

linux下c实现的数据库备份程序终于迎来第五版啦,这样改程序就暂告一段落啦,有点小激动呢...接下来的一周(可能两周)时间里,我会用一个小型的网络游戏(比拼99乘法)作为我学习linux c的毕业之 ...

3. The ResourceConfig instance does not contain any root resource classes

问题描述 当我们在使用 myeclipse 创建 Web Service Projects 项目后,运行项目然后就会出现这个问题. 解决方案 通过这个错误描述,我们项目没有找到这个资源.报错的原因在于 ...

4. NW.js使用及打包

简介 NW.js (原名 node-webkit)是一个结合了 Chromium 和 node.js 的应用运行时,通过它可以用 HTML 和 JavaScript 编写原生应用程序.它还允许开发者从 ...

5. 使用Crowd集成Confluence与JIRA

一. 独立安装Crowd,步骤1-步骤13的内容二. 设置Confluence使用Crowd进行认证.步骤14-18的内容三. 设置JIRA使用Crowd进行认证,并使用Confluence的组织机构 ...

6. 【xsy2479】counting 生成函数+多项式快速幂

题目大意:在字符集大小为\$m\$的情况下,有多少种构造长度为\$n\$的字符串\$s\$的方案,使得\$C(s)=k\$.其中\$C(s)\$表示字符串\$s\$中出现次数最多的字符的出现次数. 对\$998244353\$取 ...

7. Javascript异步编程之二回调函数

上一节讲异步原理的时候基本上把回掉函数也捎带讲了一些,这节主要举几个例子来具体化一下.在开始之前,首先要明白一件事,在javascript里函数可以作为参数进行传递,这里涉及到高阶函数的概念,大家可以 ...

8. 好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界

好文原文地址:http://segmentfault.com/a/1190000000354555 本文将首先介绍grunt-markdown插件如何配合HTML模板使用,接着我将介绍如何使用grun ...

9. Office_Visio_Pro_2007