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 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
随机推荐
- Day3-C-Radar Installation POJ1328
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...
- instance与可变参数合用,多态性
public class Doubt { public static void main(String[] args) { Dog d1=new Dog(); Dog d2=new Zangao(); ...
- java中二进制反码补码的理解
7句真言 1,二进制最高位是符号位 0正数 1负数 2,正数的原码,反码,补码都一样 3负数的原码反码 补码 (符号位不变,其他的位数取反 0->1 1->0) 4 0的反码补码都是0 5 ...
- js 中 一些重要的数组方法
今天在学Vue的时候,看到了好多JS的数组方法,但是我不知道,我以为是Vue的方法,结果找了半天资料也没找出来,最后才发现这是JS的数组对象方法,于是就想做一下笔记,加深一下印象. Array 对象方 ...
- aforge视频录像,对界面进行重绘
由于项目需要,需要录像的时候在界面加多一个圆圈,并且一起录制下来. 只需要在NewFrame增加以下代码 private void videoSourcePlayer1_NewFrame(object ...
- HiBench成长笔记——(9) Centos安装Maven
Maven的下载地址是:http://maven.apache.org/download.cgi 安装Maven非常简单,只需要将下载的压缩文件解压就可以了. cd /home/cf/app wget ...
- centos7创建ssh公钥
步骤1:使用ssh-keygen命令创建公钥和私钥 [root@model /]# [root@model /]# ssh-keygen -t rsa -P '' Generating public/ ...
- 五、Vue:使用axios库进行get和post、用拦截器对请求和响应进行预处理、Mock(数据模拟)
一.axios [应用]进行请求和传表单 [axios中文档]:https://www.kancloud.cn/yunye/axios/234845 [vue-axios]:https://cn.vu ...
- springmv返回JSON数据格式
1.先导入依赖 <!-- springmvc使用@responseBody start--> <dependency> <groupId>com.fasterxml ...
- CentOS7安装Jenkins与配置
安装 将Jenkins存储库添加到yum repos,并从此安装Jenkins. sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenki ...