hdu 3143 Speedy Escape 二分+搜索
来源:互联网 发布:中国遥感卫星数据现状 编辑:程序博客网 时间:2024/06/06 06:58
PS. 训练赛的时候看完题就想到做法了,写完之后自觉很对,但是无限WA,实在无解,赛后重写一遍,继续无限WA,换G++交,神奇的过了,(改%lf和%f,C++都过不了)唉,无法理解啊。
英文很长,但很简单,题意不赘述了。
首先求到兄弟到所有点的最短路(不能经过警察局),然后求到警察到所有点的最短路。
然后二分速度,dfs验证可行性,若到达当前点的时间小于等于警察到这个点的时间,则可以扩展。(由于是double,所以小于或者小于等于的无所谓,不必纠结这些细节)。
精度很低,1e-5都能过=。=
G++交
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include<queue>#define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#define maxn 105using namespace std;#define eps 1e-6#define maxn 105#define maxm 10005struct node{ int v,w,next;}edge[maxm];int head[maxn];bool in[maxn];int d[maxn];int ed[maxn];int a,b,c,n,m,e,id;int bro,pli;void add(int a,int b,int c){ edge[id].v=b; edge[id].w=c; edge[id].next=head[a]; head[a]=id++;}void init(){ memset(head,-1,sizeof(int)*(n+1)); memset(ed,0,sizeof(ed)); id=0;}void SPFA(int st){ queue<int> Q; memset(in,0,sizeof(int)*(n+1)); memset(d,0x3f,sizeof(int)*(n+1)); Q.push(st); in[st]=1; d[st]=0; int tmp; while(!Q.empty()) { tmp=Q.front();Q.pop(); in[tmp]=0; for(int i=head[tmp];i!=-1;i=edge[i].next) { if(edge[i].v==pli) continue; if(d[edge[i].v]>d[tmp]+edge[i].w) { d[edge[i].v]=d[tmp]+edge[i].w; if(!in[edge[i].v]) { in[edge[i].v]=1; Q.push(edge[i].v); } } } }}int vis[maxn];int db[maxn];double mid;bool isok(int now){ vis[now]=1; if(d[now]*mid<db[now]*160.0) return false; if(ed[now]) return true; for(int i=head[now];i!=-1;i=edge[i].next) { int to=edge[i].v; if(vis[to]) continue; if(isok(to)) return true; } return false;}int main(){ while(~scanf("%d%d%d",&n,&m,&e)) { init(); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } for(int i=1;i<=e;i++) { scanf("%d",&a); ed[a]=1; } scanf("%d%d",&bro,&pli); SPFA(bro); for(int i=1;i<=n;i++) db[i]=d[i]; SPFA(pli); int tzf=0; double l=0,r=10000000; while(r-l>=eps) { memset(vis,0,sizeof(vis)); mid=(l+r)/2; if(isok(bro)) {tzf=1;r=mid;} else l=mid; } if(!tzf) puts("IMPOSSIBLE"); else printf("%.10lf\n",mid); } return 0;}
4 0
- hdu 3143 Speedy Escape 二分+搜索
- HDU 3143 Speedy Escape(最短路+二分+搜索)
- HDU 3143 Speedy Escape(最短路)
- HDU-3143-Speedy Escape(最短路)
- 【HDU】【3143】【dijkstra】【图上dp】【Speedy Escape】
- hdu 2337 Escape from Enemy Territory (预处理+二分+搜索)
- HDU3143Speedy Escape 最短路+二分+搜索
- hdu 3605 Escape (二分图多重匹配)
- hdu 3605 Escape【二分图多重匹配】
- HDU 3605 Escape【二分图多重匹配】
- hdu 3605 Escape (二分图匹配)
- HDU 1813 Escape from Tetris IDA*搜索
- 【搜索进阶】HDU 1813 Escape from Tetris
- 【搜索】 HDU 3533 Escape BFS 预处理
- HDU---2364 Escape【广度优先搜索】
- hdu 2141 二分搜索
- hdu 1075 二分搜索
- hdu 3605 Escape(二分图多重匹配问题)
- 从零开始,使用python快速开发web站点(1)
- 简易贪吃蛇V1.2
- 数据导入HBase最常用的三种方式及实践分析
- 存储16进制数据的字节数组BYTE与字符串之间的互换
- hdl设计笔记:检测上升或下降沿
- hdu 3143 Speedy Escape 二分+搜索
- 开类小说明
- 第五周作业 -- 有向图邻接表表示及反向图构造
- 经典算法--快速排序的随机化版本
- 组队赛6:线段树离散化+树状数组并哈希
- Shell常见知识
- Sizeof与Strlen的区别与联系
- 宽字符
- POJ 3268