bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler

Posted kafuuchino

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler相关的知识,希望对你有一定的参考价值。

P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler

细节题。$O(n^{2})$的$bfs$可过。

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cctype>
 6 #include<cmath>
 7 #define re register
 8 using namespace std;
 9 typedef double db;
10 void read(int &x){
11     char c=getchar();x=0;int f=1;
12     while(!isdigit(c)) f&=(c!=-),c=getchar();
13     while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
14     x=f?x:-x;
15 }
16 #define N 1052
17 const db eps=1e-8;
18 int sqr(int a){return a*a;}
19 struct node{int x,y,r;}a[N];
20 int n,xt,yt,st,ed;
21 db d[N],v[N]; bool vis[N];
22 db dist(node A,node B){return sqrt((db)(sqr(A.x-B.x)+sqr(A.y-B.y)));}
23 void dfs(int x){
24     if(x==ed){
25         cout<<(int)d[x];
26         exit(0);
27     }//终点直接跳出
28     db tmp=v[x]*(db)a[x].r;
29     for(int i=1;i<=n;++i){
30         if(i==x||vis[i]) continue;
31         if(fabs(dist(a[x],a[i])-(db)(a[x].r+a[i].r))<eps){//距离实时计算:两个齿轮相切
32             vis[i]=1; v[i]=tmp/(db)a[i].r;
33             d[i]=d[x]+v[i]; dfs(i);
34         }
35     }
36 }
37 int main(){
38     read(n);read(xt);read(yt);
39     for(re int i=1;i<=n;++i){
40         read(a[i].x);read(a[i].y);read(a[i].r);
41         if(a[i].x==xt&&a[i].y==yt) ed=i;
42         if(a[i].x==0&&a[i].y==0) st=i;
43     }v[st]=d[st]=10000;vis[st]=1;dfs(st);
44 }
View Code

 

以上是关于bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机

bzoj1230 [Usaco2008 Nov]lites 开关灯

bzoj1603 / P2913 [USACO08OCT]车轮旋转Wheel Rotation

bzoj1613 / P1353 [USACO08JAN]跑步Running

bzoj1620 / P2920 [USACO08NOV]时间管理Time Management

bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power