题解:

只会O(n log^2 n)

O(n log n)先留坑

不开long long 0 分!!!!

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int maxn=;
  7. const long long oo=1000000000000000LL;
  8.  
  9. int n;
  10. long long c;
  11.  
  12. int nn;
  13. long long k1[maxn];
  14. int pla[maxn];
  15. long long len[maxn];
  16.  
  17. long long l,r,mid,ans;
  18.  
  19. int cntedge=;
  20. int head[maxn]={};
  21. int to[maxn<<],nex[maxn<<],dist[maxn<<];
  22. void Addedge(int x,int y,int z){
  23. nex[++cntedge]=head[x];
  24. to[cntedge]=y;
  25. dist[cntedge]=z;
  26. head[x]=cntedge;
  27. }
  28.  
  29. int vis[maxn];
  30. int p[maxn],cntn;
  31. int lp,rp;
  32. int father[maxn];
  33. long long d[maxn];
  34. long long tmpd[maxn];
  35.  
  36. void Dfs0(int now,int fa){
  37. father[now]=fa;
  38. for(int i=head[now];i;i=nex[i]){
  39. if(to[i]==fa)continue;
  40. d[to[i]]=d[now]+dist[i];
  41. Dfs0(to[i],now);
  42. }
  43. }
  44. void GetD(int x){
  45. vis[x]=;
  46. if(father[x])GetD(father[x]);
  47. p[++cntn]=x;
  48. }
  49. long long Getdist(int x,int fa){
  50. long long ret=;
  51. for(int i=head[x];i;i=nex[i]){
  52. if(to[i]==fa)continue;
  53. if(vis[to[i]])continue;
  54. ret=max(ret,dist[i]+Getdist(to[i],x));
  55. }
  56. return ret;
  57. }
  58.  
  59. struct FenwickTree{
  60. long long c[maxn];
  61. void Addp(int x,long long val){
  62. while(x<=nn){
  63. c[x]=max(c[x],val);
  64. x+=(x&(-x));
  65. }
  66. }
  67. long long Querymax(int x){
  68. long long ret=-oo;
  69. while(x){
  70. ret=max(ret,c[x]);
  71. x-=(x&(-x));
  72. }
  73. return ret;
  74. }
  75. void Clea(){
  76. for(int i=;i<=nn;++i)c[i]=-oo;
  77. }
  78. }T[];
  79.  
  80. int Isok(){
  81. long long lim1=-oo,lim2=-oo,lim3=-oo,lim4=-oo;
  82.  
  83. T[].Clea();T[].Clea();
  84. for(int i=;i<=cntn;++i){
  85. int p=lower_bound(k1+,k1++nn,d[i]+len[i]-mid)-k1;
  86. long long mxsum=T[].Querymax(p-);
  87. long long mxdelt=T[].Querymax(p-);
  88. lim1=max(lim1,d[i]+len[i]+mxsum+c-mid);
  89. lim2=max(lim2,-d[i]+len[i]+mxsum+c-mid);
  90. lim3=max(lim3,d[i]+len[i]+mxdelt+c-mid);
  91. lim4=max(lim4,-d[i]+len[i]+mxdelt+c-mid);
  92. T[].Addp(pla[i],d[i]+len[i]);
  93. T[].Addp(pla[i],-d[i]+len[i]);
  94. }
  95.  
  96. int p1=,p2=;
  97. int fla=;
  98. for(int i=;i<=cntn;++i){
  99. long long tl=max(lim1-d[i],lim2+d[i]);
  100. long long tr=min(-lim3+d[i],-lim4-d[i]);
  101. if(tl>tr)continue;
  102. while((d[p1]<tl)&&(p1<=cntn))++p1;
  103. while((d[p1-]>=tl)&&(p1>))--p1;
  104. while((d[p2+]<=tr)&&(p2<cntn))++p2;
  105. while((d[p2]>tr)&&(p2>=))--p2;
  106. if(p1<=p2){
  107. fla=;break;
  108. }
  109. }
  110. return fla;
  111. }
  112.  
  113. void Minit(){
  114. cntn=lp=rp=cntedge=nn=;
  115. l=;r=oo;ans=oo;
  116. memset(len,,sizeof(len));
  117. memset(head,,sizeof(head));
  118. memset(vis,,sizeof(vis));
  119. memset(p,,sizeof(p));
  120. memset(father,,sizeof(father));
  121. memset(d,,sizeof(d));
  122. }
  123.  
  124. int main(){
  125. scanf("%d%lld",&n,&c);
  126. while(n!=){
  127. Minit();
  128. for(int i=;i<=n-;++i){
  129. int x,y,z;
  130. scanf("%d%d%d",&x,&y,&z);
  131. Addedge(x,y,z);
  132. Addedge(y,x,z);
  133. }
  134. d[]=;
  135. Dfs0(,);
  136. for(int i=;i<=n;++i){
  137. if(d[i]>d[lp])lp=i;
  138. }
  139. d[lp]=;
  140. Dfs0(lp,);
  141. for(int i=;i<=n;++i){
  142. if(d[i]>d[rp])rp=i;
  143. }
  144.  
  145. for(int i=;i<=n;++i)tmpd[i]=d[i];
  146. GetD(rp);
  147. for(int i=;i<=cntn;++i)len[i]=Getdist(p[i],);
  148. for(int i=;i<=cntn;++i)l=max(l,len[i]);
  149. for(int i=;i<=cntn;++i)d[i]=tmpd[p[i]];
  150.  
  151. for(int i=;i<=cntn;++i)k1[i]=d[i]-len[i];
  152. sort(k1+,k1++cntn);
  153. nn=unique(k1+,k1++cntn)-k1-;
  154. for(int i=;i<=cntn;++i)pla[i]=lower_bound(k1+,k1++nn,d[i]-len[i])-k1;
  155.  
  156. r=l*+d[cntn];
  157. while(l<=r){
  158. mid=(l+r)>>;
  159. if(Isok()){
  160. ans=mid;r=mid-;
  161. }else{
  162. l=mid+;
  163. }
  164. }
  165. cout<<ans<<endl;
  166.  
  167. scanf("%d%lld",&n,&c);
  168. }
  169. return ;
  170. }

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. Day3-R-Aggressive cows POJ2456

    Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are locat ...

  2. NO16 第二关课后考试-aw-F-过滤已知的一级目录

    ·总结的经验:1.学会总结时学好运维的重要前提.2.通过案列或例子来总结一个技术点或者命令.3.画一张逻辑图,形象的卡通记忆这个知识技术点.4.通过管道过滤数据时,最好先输出结果,然后回退再使用管道看 ...

  3. POJ1471 Tree/洛谷P4178 Tree

    Tree P4178 Tree 点分治板子. 点分治就是直接找树的重心进行暴力计算,每次树的深度不会超过子树深度的\(\frac{1}{2}\),计算完就消除影响,找下一个重心. 所以伪代码: voi ...

  4. 浅谈MSF渗透测试

    在渗透过程中,MSF漏洞利用神器是不可或缺的.更何况它是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它本身附带数百个已知软件漏洞的专业级漏洞攻击工具.是信息收集. ...

  5. 清北学堂例题 LUOGU2523【HAOI2011】problem c

    题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...

  6. solus linux 中文输入法

    默认用ibus输入框架,安装ibus-libpinyin sudo eopkg install ibus-libpinyin ibus 安装好后重启 在系统设置 -区域和语言中添加中文,(记得自己设置 ...

  7. mysql批量插入更新操作

    //添加关联赠品(确定) public function addGiveGoods($ids,$child,$parent_sku_no){ $license=new LicenseModel(); ...

  8. HashMap之Hash碰撞源码解析

    转自:https://blog.csdn.net/luo_da/article/details/77507315 https://www.cnblogs.com/tongxuping/p/827619 ...

  9. Ubuntu 14.04 配置 VNC Server

    用putty连接Linux后,如果会话断开,也会终止此会话在Linux执行的任务. 用WinSCP传输文件很方便,目前也只能传输文件. 按照以下步骤以及提示,安装VNC Server, 1.apt-g ...

  10. 小程序开发顶部TAB栏和侧边分类点击

    先上一个效果图: 根据这个效果图我来说内容. 首先是顶部tab栏 效果实现依靠的是一个组件scroll-view.这个组件很有意思,可以多层嵌套,当然它的属性也很多. 这里主要用的是scroll-x, ...