NOIP 2017 提高组 奶酪___dfs
2018-03-08 17:10
309 查看
题目大意:
题解:
这题有多种做法,我来讲讲怎么去实现dfs,虽然也可用bfs啊,并查集啊去实现,可是搜索的代码实现很容易。①将老鼠一开始能到的空洞标记,即所有满足圆心zi-r≤0的空洞。
②以这些空洞为基础去看是否能够到达其他空洞,需满足2个圆点间距离≤2*r。
③被标记过的点除了一开始的基础点,其他不需要再次搜,大力剪枝,暴力AC。
代码:
var x,y,z,f:array [-5..1001] of extended; t,i,n,h,r:longint; cp:boolean; function check(x1,y1,z1,x2,y2,z2:extended):boolean; var rp:extended; begin rp:=sqrt(sqr(x1-x2)+sqr(y1-y2)+sqr(z1-z2)); if rp<=2*r then exit(true); exit(false); end; procedure dfs(dep:longint); var i:longint; begin for i:=1 to n do if f[i]=0 then if check(x[dep],y[dep],z[dep],x[i],y[i],z[i]) then begin f[i]:=-1; dfs(i); end; end; begin readln(t); f[-1]:=-1; while t>=1 do begin readln(n,h,r); fillchar(f,sizeof(f),0); for i:=1 to n do begin readln(x[i],y[i],z[i]); if z[i]-r<=0 then f[i]:=-1; end; for i:=1 to n do if f[i]=-1 then dfs(i); cp:=true; for i:=1 to n do begin if not(cp) then break; if f[i]=-1 then if z[i]+r>=h then begin writeln('Yes'); cp:=false; end; end; if cp then writeln('No'); dec(t); end; end.
相关文章推荐
- JZOJ 5476. 【NOIP2017提高组正式赛】奶酪
- NOIP 2017 提高组 Day2 T1 奶酪【并查集】
- NOIP 2017 提高组 K: 奶酪 (SPFA || 并查集)
- jzoj5336 【NOIP2017提高A组模拟8.24】提米树 (dfs序dp,奇异姿势dp)
- NOIP 2017 提高组 Day2 T1 奶酪 cheese.cpp
- 5476. 【NOIP2017提高组正式赛】奶酪
- NOIP 2017 提高组 小凯的诱惑___数学
- NOIP2017 提高Day2-2 宝藏 解题报告
- JZOJ5418. 【NOIP2017提高A组集训10.24】 树形DP+组合数
- 【JZOJ5424】【NOIP2017提高A组集训10.25】凤凰院凶真
- 【JZOJ 5429】【NOIP2017提高A组集训10.27】排列
- 【JZOJ5432】【NOIP2017提高A组集训10.28】三元组
- JZOJ 5438. 【NOIP2017提高A组集训10.31】Tree
- JZOJ 5442. 【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ5379. 【NOIP2017提高A组模拟9.21】Victor爱数字 数位DP
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
- NOIP2017提高组模拟赛5 (总结)
- 【JZOJ 5249】【NOIP2017提高A组模拟8.10】文本编辑器
- 【JZOJ 5449】【NOIP2017提高A组冲刺11.4】Pacifist
- JZOJ5249. 【NOIP2017提高A组模拟8.10】文本编辑器