题目大意:求给定的一张无向带权图的次短路。

题解:先跑一遍 spfa 求出从起点到终点的最短路,记录路径。接着枚举删边,并重新跑 spfa,统计最小值即可。

至于为什么 dp 做法不行,暂时还不清楚。

代码如下

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxe=2e4+10;
  4. const int maxv=210;
  5. const double inf=0x3f3f3f3f;
  6. struct node{
  7. int nxt,to;
  8. double w;
  9. }e[maxe<<1];
  10. int tot=1,head[maxv];
  11. inline void add_edge(int from,int to,double w){
  12. e[++tot]=node{head[from],to,w},head[from]=tot;
  13. }
  14. int n,m,pre[maxv];
  15. double x[maxv],y[maxv],d[maxv],ans=inf;
  16. bool in[maxv];
  17. inline double calc(int a,int b){
  18. return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
  19. }
  20. void read_and_parse(){
  21. scanf("%d%d",&n,&m);
  22. for(int i=1;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);
  23. for(int i=1,a,b;i<=m;i++){
  24. scanf("%d%d",&a,&b);
  25. double c=calc(a,b);
  26. add_edge(a,b,c),add_edge(b,a,c);
  27. }
  28. }
  29. queue<int> q;
  30. void spfa(int a,int b){
  31. memset(in,0,sizeof(in));
  32. fill(d+1,d+n+1,inf);
  33. q.push(1),in[1]=1,d[1]=0;
  34. while(q.size()){
  35. int u=q.front();q.pop(),in[u]=0;
  36. for(int i=head[u];i;i=e[i].nxt){
  37. int v=e[i].to;double w=e[i].w;
  38. if((u==a&&v==b)||(v==a&&u==b))continue;
  39. if(d[v]>d[u]+w){
  40. d[v]=d[u]+w;
  41. if(a==-1&&b==-1)pre[v]=u;
  42. if(!in[v])q.push(v),in[v]=1;
  43. }
  44. }
  45. }
  46. }
  47. void solve(){
  48. spfa(-1,-1);
  49. for(int i=n;pre[i];i=pre[i]){
  50. spfa(i,pre[i]);
  51. ans=min(ans,d[n]);
  52. }
  53. if(ans==inf)puts("-1");
  54. else printf("%.2lf\n",ans);
  55. }
  56. int main(){
  57. read_and_parse();
  58. solve();
  59. return 0;
  60. }

【洛谷P1491】集合位置的更多相关文章

  1. 洛谷 P1491 集合位置

    P1491 集合位置 题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的 ...

  2. 洛谷P1491 集合位置 [最短路,SPFA]

    题目传送门 题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记 ...

  3. 洛谷P1491集合位置

    传送门啦 这个题说白了就是求一个次短路. 方法是我们先跑一遍最短路,记录下最短路上每一个点的前驱.然后我们将最短路上每一条边都标记一次,分别跑一边最短路,求出最短路径即可. 在这我们不用特殊判断是否是 ...

  4. AC日记——集合位置 洛谷 P1491

    集合位置 思路: 次短路: 先走一遍最短路: 记录最短路径,然后依次删边走最短路: 最短的长度就是次短路: 来,上代码: #include <queue> #include <cma ...

  5. 洛谷 P1466 集合 Subset Sums Label:DP

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  6. 洛谷P1466 集合 Subset Sums

    P1466 集合 Subset Sums 162通过 308提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 对于从1到N (1 ...

  7. P1491 集合位置

    题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记得狗狗的枪法 ...

  8. P1491 集合位置 次短路

    这个题是一个次短路的裸题,就是把最短路路径求出来之后依次删边,然后跑最短路,在这些情况里取最小值就行了. 题干: 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家 ...

  9. 洛谷 P2415 集合求和【数学公式/模拟】

    给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出 ...

随机推荐

  1. 20155220 《网络对抗》Exp 8 Web基础

    20155220 <网络对抗>Exp 8 Web基础 基础问题回答 实践内容 1.Web前端HTML 配置环境 正常安装.启动Apache 安装:sudo apt-get install ...

  2. 20155302《网络对抗》Exp7 网络欺诈防范

    20155302<网络对抗>Exp7 网络欺诈防范 实验内容 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof (1分) (3)结合应用两种技术, ...

  3. Eclipse中Hadoop插件配置

    Eclipse中Hadoop插件DFS配置 http://www.cnblogs.com/xia520pi/archive/2012/05/20/2510723.html

  4. cocos2d-x学习记录4——图形绘制

    重写CCNode的draw函数能够绘制出各种基本图形,如点.直线.多边形.园.贝塞尔曲线等,同时还可以设置绘制的颜色和宽度. MyScene的draw函数 void MyScene::draw() { ...

  5. java Script复习总结

    一:基础知识 1.JavaScript语言的历史 l  早期名称:livescript l  开发公司:网景公司(netscape) 2.JavaScript语言的基本特点 l  基于对象 l  事件 ...

  6. 关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command

    在执行链接Appium服务时连接失败可能原因: 1.报错截图: 2.先检查包名是否正确(正常情况下包名不会错误)通过命令行查看包名:aapt dump badging xxx.apk 3.检查对应包的 ...

  7. OD之破解密钥文件授权(三)

    除了上次的序列号验证以外,还有这种密钥授权模式,需要密钥文件授权才能打开文件; 老办法,先拖进OD中动态分析再说: 然后F8进行调试这时候发现了一个条件跳转函数jnz下面是说跳转未实现,那我们发现上面 ...

  8. 更新k8s镜像版本的三种方式

    一.知识准备 更新镜像版本是在k8s日常使用中非常常见的一种操作,本文主要介绍更新介绍的三种方法 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-c ...

  9. openstack删除僵尸卷

    问题描述: 最近在清理openstack环境,在删除cinder云硬盘时,一直发现有两个卷在删除中. 解决方法如下: 首先我们去cinder的数据库中找到这个卷,命令为: MariaDB [(none ...

  10. 【文章存档】如何通过 GitLab 进行持续部署

    好久没写博客了,这几天存档一下新文章. 链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/a ...