BZOJ 4901 [CTSC2017]网络
题解:
只会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]网络的更多相关文章
- [CTSC2017]网络
[CTSC2017]网络 连一条长度为len的边,使得基环树的直径最小 结论:一定连在某条直径两个点上(否则更靠近不劣) 然后二分答案判定. dp[i]:链上一个点往下延伸的最大深度 考虑对于任意两个 ...
- BZOJ 3931: [CQOI2015]网络吞吐量
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1555 Solved: 637[Submit][Stat ...
- bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3931 [题意] 只能通过1-n的最短路,求网络最大流 [思路] 分别以1,n为起点做最 ...
- BZOJ 3931: [CQOI2015]网络吞吐量 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...
- BZOJ 4538: [Hnoi2016]网络 [整体二分]
4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1, ...
- ●BZOJ 3931 [CQOI2015]网络吞吐量
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...
- BZOJ.2816.[ZJOI2012]网络(LCT)
题目链接 BZOJ 洛谷 对每种颜色维护一个LCT,保存点之间的连接关系. 修改权值A[x]和所有Max[x]都要改: 修改边的颜色先枚举所有颜色,看是否在某种颜色中有边,然后断开.(枚举一遍就行啊 ...
- bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
随机推荐
- 087、Java数组之对象数组的静态初始化
01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...
- ROS-4 : ROS节点和主题
依照<ROS-3 : Catkin工作空间和ROS功能包>,创建catkin工作空间,并在起src下创建功能包ros_demo_pkg,依赖项为roscpp.std_msgs.action ...
- rinetd 进行转发
目前云数据库 Redis 版需要通过 ECS 进行内网连接访问.如果您本地需要通过公网访问云数据库 Redis,可以在 ECS Linux 云服务器中安装 rinetd 进行转发实现. 在云服务器 E ...
- 手动搭建Vue之前奏:搭建webpack项目
手动搭建vue项目 搭建vue前首先搭建webpack项目 首先你应当安装一下npm以及nodejs 安装完成后,进行如下操作: // 创建项目根目录 mkdir some_project_name ...
- MinGW下编译curl-7.60.0时, 发生ERROR_FILE_NOT_FOUND undeclared
在编译curl-7.60.0时, 遇到ERROR_FILE_NOT_FOUND undeclared 这个情况, 就没法编译成功!! 下载了以往的版本, 发现是从curl-7.59.0版本开始才有 t ...
- MySQL之表、列别名及各种JOIN连接详解
MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...
- Python连载61-tkinter三种布局
一.pack布局举例 #pack布局案例 import tkinter baseFrame = tkinter.Tk() #以下代码都是创建一个组件,然后布局 btn1 = tkinter.Butto ...
- mysql使用的坑
一: mysql默认是安装记录的物理顺序取数据的,如果不加order by 排序,可能得不到预期的结果. (1) 获取 两个时间点的 id (很快) $sql = ‘select id from a ...
- POJ1611 && POJ2524 并查集入门
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 28293 Accepted: 13787 De ...
- Day4-T1
原题目 Hades 与 Dionysus 在狂饮后玩起了多米诺骨牌的小游戏. 现在桌上有 N 块多米诺骨牌,每块多米诺骨牌上半部分和下半部分上都有一个整数.每次翻转可让 一块多米诺骨牌上下翻转,即上下 ...