博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2282: [Sdoi2011]消防
阅读量:5720 次
发布时间:2019-06-18

本文共 1179 字,大约阅读时间需要 3 分钟。

1 #include
2 #include
3 #include
4 #define N 600000 5 using namespace std; 6 int cnt,n,s,head[N],next[N*2],u[N*2],v[N*2],q[N],h,t,d[N],f[N],mx,rt1,mx1,from[N],zhan[N],tot,mark[N]; 7 int l,r,ans; 8 void jia(int a1,int a2,int a3) 9 { 10 cnt++; 11 next[cnt]=head[a1]; 12 head[a1]=cnt; 13 u[cnt]=a2; 14 v[cnt]=a3; 15 return; 16 } 17 bool pan(int a1) 18 { 19 int L=1,R=tot; 20 for(;zhan[1]-zhan[L]<=a1;L++); 21 for(;zhan[R]-zhan[tot]<=a1;R--); 22 if(zhan[L-1]-zhan[R+1]>s) 23 return 0; 24 return 1; 25 } 26 void dfs(int a1) 27 { 28 h=0; 29 t=1; 30 q[t]=a1; 31 memset(f,0,sizeof(f)); 32 f[a1]=1; 33 d[a1]=0; 34 for(;h
l) 90 l=d[i]; 91 for(;l<=r;) 92 { 93 int mid=(l+r)>>1; 94 if(pan(mid)) 95 { 96 ans=mid; 97 r=mid-1; 98 } 99 else100 l=mid+1;101 }102 printf("%d\n",ans);103 return 0;104 }

显然最长距离最短,一定是在直径上,我们先DFS两遍找出直径,把直径上的边赋值成0,跑一遍dfs,找一个最大值作为l,二分答案判断。

转载于:https://www.cnblogs.com/xydddd/p/5300116.html

你可能感兴趣的文章
整理不错的kaggle链接(更新中)
查看>>
JDBC(2)Statement
查看>>
DRF教程2-请求和响应
查看>>
Asp.net Session 与Cookie的应用
查看>>
聊天 WH
查看>>
C#之接口
查看>>
20180401第九届蓝桥杯题解
查看>>
Python 爬虫 NewCnblogs (爬虫-Django-数据分析)
查看>>
结对项目--四则运算“软件”之升级版
查看>>
HDU 1010 Tempter of the Bone (DFS + 奇偶剪枝)
查看>>
模板模式(二十)
查看>>
Sae配置Java数据库连接
查看>>
【译】Spring 4 @Profile注解示例
查看>>
Python3笔记---变量和简单的数据类型
查看>>
WCF常见错误解决方法
查看>>
Console.WriteLine 不会输出到unity控制台
查看>>
中文参考文献如何导入到endnote中
查看>>
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
查看>>
SQL Server 非聚集索引(如何预先估算其大小空间) (转载)
查看>>
attachEvent与addEventListener的区别 真实例子
查看>>