题解:

只会O(n log^2 n)

O(n log n)先留坑

不开long long 0 分!!!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const long long oo=1000000000000000LL; int n;
long long c; int nn;
long long k1[maxn];
int pla[maxn];
long long len[maxn]; long long l,r,mid,ans; int cntedge=;
int head[maxn]={};
int to[maxn<<],nex[maxn<<],dist[maxn<<];
void Addedge(int x,int y,int z){
nex[++cntedge]=head[x];
to[cntedge]=y;
dist[cntedge]=z;
head[x]=cntedge;
} int vis[maxn];
int p[maxn],cntn;
int lp,rp;
int father[maxn];
long long d[maxn];
long long tmpd[maxn]; void Dfs0(int now,int fa){
father[now]=fa;
for(int i=head[now];i;i=nex[i]){
if(to[i]==fa)continue;
d[to[i]]=d[now]+dist[i];
Dfs0(to[i],now);
}
}
void GetD(int x){
vis[x]=;
if(father[x])GetD(father[x]);
p[++cntn]=x;
}
long long Getdist(int x,int fa){
long long ret=;
for(int i=head[x];i;i=nex[i]){
if(to[i]==fa)continue;
if(vis[to[i]])continue;
ret=max(ret,dist[i]+Getdist(to[i],x));
}
return ret;
} struct FenwickTree{
long long c[maxn];
void Addp(int x,long long val){
while(x<=nn){
c[x]=max(c[x],val);
x+=(x&(-x));
}
}
long long Querymax(int x){
long long ret=-oo;
while(x){
ret=max(ret,c[x]);
x-=(x&(-x));
}
return ret;
}
void Clea(){
for(int i=;i<=nn;++i)c[i]=-oo;
}
}T[]; int Isok(){
long long lim1=-oo,lim2=-oo,lim3=-oo,lim4=-oo; T[].Clea();T[].Clea();
for(int i=;i<=cntn;++i){
int p=lower_bound(k1+,k1++nn,d[i]+len[i]-mid)-k1;
long long mxsum=T[].Querymax(p-);
long long mxdelt=T[].Querymax(p-);
lim1=max(lim1,d[i]+len[i]+mxsum+c-mid);
lim2=max(lim2,-d[i]+len[i]+mxsum+c-mid);
lim3=max(lim3,d[i]+len[i]+mxdelt+c-mid);
lim4=max(lim4,-d[i]+len[i]+mxdelt+c-mid);
T[].Addp(pla[i],d[i]+len[i]);
T[].Addp(pla[i],-d[i]+len[i]);
} int p1=,p2=;
int fla=;
for(int i=;i<=cntn;++i){
long long tl=max(lim1-d[i],lim2+d[i]);
long long tr=min(-lim3+d[i],-lim4-d[i]);
if(tl>tr)continue;
while((d[p1]<tl)&&(p1<=cntn))++p1;
while((d[p1-]>=tl)&&(p1>))--p1;
while((d[p2+]<=tr)&&(p2<cntn))++p2;
while((d[p2]>tr)&&(p2>=))--p2;
if(p1<=p2){
fla=;break;
}
}
return fla;
} void Minit(){
cntn=lp=rp=cntedge=nn=;
l=;r=oo;ans=oo;
memset(len,,sizeof(len));
memset(head,,sizeof(head));
memset(vis,,sizeof(vis));
memset(p,,sizeof(p));
memset(father,,sizeof(father));
memset(d,,sizeof(d));
} int main(){
scanf("%d%lld",&n,&c);
while(n!=){
Minit();
for(int i=;i<=n-;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
Addedge(x,y,z);
Addedge(y,x,z);
}
d[]=;
Dfs0(,);
for(int i=;i<=n;++i){
if(d[i]>d[lp])lp=i;
}
d[lp]=;
Dfs0(lp,);
for(int i=;i<=n;++i){
if(d[i]>d[rp])rp=i;
} for(int i=;i<=n;++i)tmpd[i]=d[i];
GetD(rp);
for(int i=;i<=cntn;++i)len[i]=Getdist(p[i],);
for(int i=;i<=cntn;++i)l=max(l,len[i]);
for(int i=;i<=cntn;++i)d[i]=tmpd[p[i]]; for(int i=;i<=cntn;++i)k1[i]=d[i]-len[i];
sort(k1+,k1++cntn);
nn=unique(k1+,k1++cntn)-k1-;
for(int i=;i<=cntn;++i)pla[i]=lower_bound(k1+,k1++nn,d[i]-len[i])-k1; r=l*+d[cntn];
while(l<=r){
mid=(l+r)>>;
if(Isok()){
ans=mid;r=mid-;
}else{
l=mid+;
}
}
cout<<ans<<endl; scanf("%d%lld",&n,&c);
}
return ;
}

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

  1. [CTSC2017]网络

    [CTSC2017]网络 连一条长度为len的边,使得基环树的直径最小 结论:一定连在某条直径两个点上(否则更靠近不劣) 然后二分答案判定. dp[i]:链上一个点往下延伸的最大深度 考虑对于任意两个 ...

  2. BZOJ 3931: [CQOI2015]网络吞吐量

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1555  Solved: 637[Submit][Stat ...

  3. bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3931 [题意] 只能通过1-n的最短路,求网络最大流 [思路] 分别以1,n为起点做最 ...

  4. BZOJ 3931: [CQOI2015]网络吞吐量 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  5. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

    最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...

  6. BZOJ 4538: [Hnoi2016]网络 [整体二分]

    4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1, ...

  7. ●BZOJ 3931 [CQOI2015]网络吞吐量

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...

  8. BZOJ.2816.[ZJOI2012]网络(LCT)

    题目链接 BZOJ 洛谷 对每种颜色维护一个LCT,保存点之间的连接关系. 修改权值A[x]和所有Max[x]都要改: 修改边的颜色先枚举所有颜色,看是否在某种颜色中有边,然后断开.(枚举一遍就行啊 ...

  9. bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...

随机推荐

  1. 让Nutz支持最快的模板引擎Smarty4j

    Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...

  2. 有时间会做系列一(Dice)

    题目大意:给n个骰子的每面安排点数,第i个骰子有a[i]面,a[i]和为m,点数范围从1到m,不重复.问怎么安排掷骰子的点数和的期望最大.输出期望和每个骰子的点数(按骰子输入顺序). 思路: EX=x ...

  3. Java中很少用的CopyOnWriteArrayList

    类注释 /** * A thread-safe variant of {@link java.util.ArrayList} in which all mutative * operations ({ ...

  4. JAVA开源爬虫列表及简介

    本文列举了一些较为常用的JAVA开源爬虫框架: 1.Apache Nutch 官方网站:http://nutch.apache.org/ 是否支持分布式:是 可扩展性:中.Apache Nutch并不 ...

  5. P1058 选择题

    P1058 选择题 转跳点:

  6. HihoCoder第二周与POJ3630:Trie树的建立

    这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...

  7. 第1节 HUE:14、15、16、hue与hdfs、yarn集群、hive、impala、mysql的整合

    3.hue与其他框架的集成 3.1.hue与hadoop的HDFS以及yarn集成 第一步:更改所有hadoop节点的core-site.xml配置 记得更改完core-site.xml之后一定要重启 ...

  8. day01-Python运维开发基础

    还是用思维导图来一遍,印象更深!

  9. Day6-T2

    原题目 给你一个长度为n的序列A,请求出最大的一对数(Ai ,Aj),使Ai&Aj最大. 第一行为n,接下来n行,每一个数表示Ai. 输出最大的“and”. S1: Input: Output ...

  10. Day5-T1

    原题目 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿.为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份.请问最少要切几刀? 第一行一 ...