Car的旅行路线

思路:

  这题不难,就是有点恶心;

  而且,请认真读题目(就是题目卡死劳资);

来,上代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 807
#define maxm 860005
#define INF 0x7fffffff struct CityType {
double x[],y[],c;
};
struct CityType city[maxn]; int T,n,s,t,head[maxn],E[maxm],V[maxm];
int cnt,que[maxn<<]; double W[maxm],dis[maxn],c; bool if_[maxn]; inline double d(int now,int v1,int v2)
{
double x1=city[now].x[v1],x2=city[now].x[v2];
double y1=city[now].y[v1],y2=city[now].y[v2];
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
} inline void edge_add(int u,int v,double w)
{
E[++cnt]=head[u],V[cnt]=v,W[cnt]=w,head[u]=cnt;
E[++cnt]=head[v],V[cnt]=u,W[cnt]=w,head[v]=cnt;
} double ds(int u,int v1,int v,int v2)
{
double xx=city[u].x[v1]-city[v].x[v2];
double yy=city[u].y[v1]-city[v].y[v2];
return sqrt(xx*xx+yy*yy);
} void spfa()
{
memset(if_,false,sizeof(if_));
memset(dis,0x7f,sizeof(dis));
int h=,tail=;que[]=s*-,que[]=s*-;
que[]=s*-,que[]=s*,if_[s*-]=true;
if_[s*-]=true,if_[s*-]=true,if_[s*]=true;
dis[s*-]=,dis[s*-]=,dis[s*-]=,dis[s*]=;
while(h<tail)
{
int now=que[h++];if_[now]=false;
for(int i=head[now];i;i=E[i])
{
if(dis[V[i]]>dis[now]+W[i])
{
dis[V[i]]=dis[now]+W[i];
if(!if_[V[i]]) if_[V[i]]=true,que[tail++]=V[i];
}
}
}
} int main()
{
scanf("%d",&T);
while(T--)
{
memset(head,,sizeof(head)),cnt=;
scanf("%d%lf%d%d",&n,&c,&s,&t);
for(int i=;i<=n;i++)
{
for(int v=;v<;v++) scanf("%lf%lf",&city[i].x[v],&city[i].y[v]);
scanf("%lf",&city[i].c);
double d01=d(i,,),d02=d(i,,),d12=d(i,,);
int pos=i*-;
if(d01+d02==d12)
{
city[i].x[]=city[i].x[]+city[i].x[]-city[i].x[];
city[i].y[]=city[i].y[]+city[i].y[]-city[i].y[];
}
else if(d01+d12==d02)
{
city[i].x[]=city[i].x[]+city[i].x[]-city[i].x[];
city[i].y[]=city[i].y[]+city[i].y[]-city[i].y[];
}
else
{
city[i].x[]=city[i].x[]+city[i].x[]-city[i].x[];
city[i].y[]=city[i].y[]+city[i].y[]-city[i].y[];
}
for(int j=;j<=;j++)
{
for(int v=j+;v<=;v++) edge_add(pos+j,pos+v,sqrt(d(i,j,v))*city[i].c);
}
}
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
int posi=i*-,posj=j*-;
for(int v=;v<;v++)
{
for(int z=;z<;z++) edge_add(v+posi,z+posj,ds(i,v,j,z)*c);
}
}
}
spfa();double ans=INF;
for(int i=;i<=;i++) ans=min(ans,dis[i+t*-]);
printf("%.1lf",ans);
}
return ;
}

AC日记——Car的旅行路线 洛谷 P1027的更多相关文章

  1. AC日记——校门外的树 洛谷 P1047

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  2. AC日记——无线网络发射器选址 洛谷 P2038

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  3. AC日记——小A的糖果 洛谷七月月赛

    小A的糖果 思路: for循环贪心: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #defi ...

  4. AC日记——矩阵取数游戏 洛谷 P1005

    矩阵取数游戏 思路: dp+高精: 代码: #include <bits/stdc++.h> using namespace std; #define ll long long struc ...

  5. AC日记——红色的幻想乡 洛谷 P3801

    红色的幻想乡 思路: 线段树+容斥原理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #de ...

  6. AC日记——妖梦拼木棒 洛谷 P3799

    妖梦拼木棒 思路: 神特么题: 代码: #include <bits/stdc++.h> using namespace std; #define mod 1000000007LL int ...

  7. AC日记——妖梦斩木棒 洛谷 P3797

    妖梦斩木棒 思路: 略坑爹: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 #define m ...

  8. AC日记——[SDOI2009]HH去散步 洛谷 P2151

    [SDOI2009]HH去散步 思路: 矩阵快速幂递推(类似弗洛伊德): 给大佬跪烂-- 代码: #include <bits/stdc++.h> using namespace std; ...

  9. AC日记——聪明的质监员 洛谷 P1314

    聪明的质监员 思路: 二分: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 #define l ...

随机推荐

  1. 学习pytho第五天 循环

    age_of_Bob = 56#定义年龄 count = 0#头部计数 while True:#while循环 if count ==3:#如果次数==3: break#退出 guess_age = ...

  2. makefile学习(1)

    GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法. 最后用 ...

  3. 动态规划:HDU-1398-Square Coins(母函数模板)

    解题心得: 1.其实此题有两种做法,动态规划,母函数.个人更喜欢使用动态规划来做,也可以直接套母函数的模板 Square Coins Time Limit: 2000/1000 MS (Java/Ot ...

  4. jichu

    第 题 请编写函数 fun,其功能时:计算并输出当 x<0.97 时下列多项式的值,直到| sn-s(n-)|<0.000001 为止. Sn=+.5x+)/!x()+…+)()…..() ...

  5. 4 Template层 -模板继承

    1.模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板 ...

  6. Linux服务器管理员必备Linux命令TOP5

    Linux桌面环境的界面友好度.图形性能及附件工具已经大幅进化,然而Linux服务器却还没有能达到这一步. 作为系统管理员必须熟练掌握Linux命令.Linux命令的内容很多,其中的一些TOP命令对于 ...

  7. pc和移动端获取滚动条的位置

    移动端获取滚动条:document.body.scrollTop pc端获取滚动条:document.documentElement.scrollTop

  8. SQL 语句执行后同步返回结果条数

    PgSQL SELECT COUNT(*) OVER() AS res_count FROM table WHERE ... MySQL mysql> SELECT SQL_CALC_FOUND ...

  9. 关于caffe 是如何卷积的一点总结

    最近,在看caffe源码时,偶然在网上看到一个问题?觉得挺有意思,于是,仔细的查了相关资料,并将总结写在这里,供大家迷惑时,起到一点启示作用吧. 问题的题目是CNN中的一个卷积层输入64个通道的特征子 ...

  10. 论文笔记(一)Re-ranking by Multi-feature Fusion with Diffusion for Image Retrieval

    0x00 预备知识 $\DeclareMathOperator{\vol}{vol}$ 无向图上的随机游走 无向图 $G=(V,E)$,边权函数 $w\colon V\times V \to R_+$ ...