本以为是个二进制分组傻逼题https://www.cnblogs.com/Gloid/p/9545753.html,实际上有神仙的一个log做法https://www.cnblogs.com/asuldb/p/10721251.html。下面代码是二进制分组的。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<queue>
  8. using namespace std;
  9. #define ll long long
  10. #define N 100010
  11. #define M 500010
  12. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  13. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  14. int read()
  15. {
  16. int x=0,f=1;char c=getchar();
  17. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  18. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  19. return x*f;
  20. }
  21. int n,m,k,p[N],a[N],t;
  22. ll d[N];
  23. bool flag[N];
  24. struct data{int to,nxt,len;
  25. }edge[M];
  26. void addedge(int x,int y,int z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
  27. struct data2
  28. {
  29. int x;ll d;
  30. bool operator <(const data2&a) const
  31. {
  32. return d>a.d;
  33. }
  34. };
  35. priority_queue<data2> q;
  36. void dijkstra()
  37. {
  38. memset(flag,0,sizeof(flag));
  39. for (;;)
  40. {
  41. while (!q.empty()&&flag[q.top().x]) q.pop();
  42. if (q.empty()) break;
  43. data2 x=q.top();q.pop();
  44. flag[x.x]=1;
  45. for (int i=p[x.x];i;i=edge[i].nxt)
  46. if (x.d+edge[i].len<d[edge[i].to])
  47. {
  48. d[edge[i].to]=x.d+edge[i].len;
  49. q.push((data2){edge[i].to,d[edge[i].to]});
  50. }
  51. }
  52. }
  53. int main()
  54. {
  55. #ifndef ONLINE_JUDGE
  56. freopen("bzoj5506.in","r",stdin);
  57. freopen("bzoj5506.out","w",stdout);
  58. const char LL[]="%I64d\n";
  59. #else
  60. const char LL[]="%lld\n";
  61. #endif
  62. int T=read();
  63. while (T--)
  64. {
  65. n=read(),m=read(),k=read();
  66. memset(p,0,sizeof(p));t=0;
  67. for (int i=1;i<=m;i++)
  68. {
  69. int x=read(),y=read(),z=read();
  70. addedge(x,y,z);
  71. }
  72. for (int i=1;i<=k;i++) a[i]=read();
  73. ll ans=10000000000000000ll;
  74. for (int _=18;~_;_--)
  75. {
  76. while (!q.empty()) q.pop();
  77. memset(d,42,sizeof(d));
  78. for (int i=1;i<=k;i++)
  79. if (a[i]&(1<<_)) d[a[i]]=0,q.push((data2){a[i],0});
  80. dijkstra();
  81. for (int i=1;i<=k;i++)
  82. if (!(a[i]&(1<<_))) ans=min(ans,d[a[i]]);
  83. while (!q.empty()) q.pop();
  84. memset(d,42,sizeof(d));
  85. for (int i=1;i<=k;i++)
  86. if (!(a[i]&(1<<_))) d[a[i]]=0,q.push((data2){a[i],0});
  87. dijkstra();
  88. for (int i=1;i<=k;i++)
  89. if (a[i]&(1<<_)) ans=min(ans,d[a[i]]);
  90. }
  91. cout<<ans<<endl;
  92. }
  93. return 0;
  94. }

  

BZOJ5506 GXOI/GZOI2019旅行者(最短路)的更多相关文章

  1. P5304 [GXOI/GZOI2019]旅行者(最短路/乱搞)

    luogu bzoj Orz自己想出神仙正解的sxy 描述略 直接把所有起点推进去跑dijkstra... 并且染色,就是记录到这个点的最短路是由哪个起点引导出来的 然后再把所有边反指跑一次... 之 ...

  2. 【BZOJ5506】[GXOI/GZOI2019]旅行者(最短路)

    [BZOJ5506][GXOI/GZOI2019]旅行者(最短路) 题面 BZOJ 洛谷 题解 正着做一遍\(dij\)求出最短路径以及从谁转移过来的,反过来做一遍,如果两个点不由同一个点转移过来就更 ...

  3. [LOJ3087][GXOI/GZOI2019]旅行者——堆优化dijkstra

    题目链接: [GXOI/GZOI2019]旅行者 我们考虑每条边的贡献,对每个点求出能到达它的最近的感兴趣的城市(设为$f[i]$,最短距离设为$a[i]$)和它能到达的离它最近的感兴趣的城市(设为$ ...

  4. P5304 [GXOI/GZOI2019]旅行者

    题目地址:P5304 [GXOI/GZOI2019]旅行者 这里是官方题解 一个图 \(n\) 点 \(m\) 条边,里面有 \(k\) 个特殊点,问这 \(k\) 个点之间两两最短路的最小值是多少? ...

  5. 洛谷 P5304 [GXOI/GZOI2019]旅行者(最短路)

    洛谷:传送门 bzoj:传送门 参考资料: [1]:https://xht37.blog.luogu.org/p5304-gxoigzoi2019-lv-xing-zhe [2]:http://www ...

  6. [GXOI/GZOI2019]旅行者 (最短路)

    题意 给定一个有向图,其中一些顶点为关键点.求这些关键点两两之间最小距离. 题解 考试时没怎么想写了50分暴力走了.以为是什么强连通分量的解法,结果就是个最短路.直接从关键点跑一次最短路dis[0], ...

  7. 洛谷 P 5 3 0 4 [GXOI/GZOI2019]旅行者

    题目描述 J 国有 n 座城市,这些城市之间通过 m 条单向道路相连,已知每条道路的长度. 一次,居住在 J 国的 Rainbow 邀请 Vani 来作客.不过,作为一名资深的旅行者,Vani 只对 ...

  8. luogu P5304 [GXOI/GZOI2019]旅行者

    传送门 所以这个\(5s\)是SMG 暴力是枚举每一个点跑最短路,然后有一个很拿衣服幼稚的想法,就是把所有给出的关键点当出发点,都丢到队列里,求最短路的时候如果当前点\(x\)某个相邻的点\(y\)是 ...

  9. [GXOI/GZOI2019]旅行者

    就我感觉这道题很神仙吗/kel 仔细想想应该也是一种适用范围挺广的做法. 考虑我们可以通过dijkstra在O(nlogn)求出一个点集到另外一个点集的最短路. 那么我们可以通过一些划分点集的方式使得 ...

随机推荐

  1. 高效遍历匹配Json数据,避免嵌套循环[转]

    工作中经常会遇到这样的需求:1.购物车列表中勾选某些,点击任意一项,前往详情页,再返回购物车依旧需要呈现勾选状态2.勾选人员后,前往别的页面,再次返回,人员依旧程勾选状态3.等等.... 数据结构如下 ...

  2. sqlserver操作geography方法

    参考:https://www.cnblogs.com/ytwy/p/5977848.html http://desktop.arcgis.com/zh-cn/arcmap/latest/manage- ...

  3. js知识点总结

    组成 ECMAscript 基础语法     变量 数据类型 运算符 数组 函数 对象BOM 浏览器对象模型     window对象(获取浏览器宽高)     history对象     locat ...

  4. C++语法小技巧

    前言 写的很乱,各种内容都有.仅仅是为了记录一下 而且内容极其不严谨(没错,只有实践,没有理论)!请各位谨慎驾驶! 强制内联 #define Inline __inline__ __attribute ...

  5. iOS----------The Apple Developer Program License Agreement has been updated.

    The Apple Developer Program License Agreement has been updated. In order to access certain membershi ...

  6. Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse

    Python第十天   print >> f,和fd.write()的区别    stdout的buffer  标准输入 标准输出  从控制台重定向到文件  标准错误   重定向 输出流和 ...

  7. 彻底删除mysql服务(清理注册表)

    由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. 解决步骤: 1.以管理员身份运行命令提示 ...

  8. Windows使用MongoDB,以及索引创建

    安装MongoDB https://www.mongodb.com/download-center#community 点击msi安装程序进行安装,可以进行自定义安装,选择安装位置,我选择的是D盘 在 ...

  9. 【English 】20190319

     BOKO鼻子['boʊkoʊ] pores毛孔['pɔ:z] cute漂亮可爱[kjut] DEKO-BOKO pores don't make a girl cute! ideal最理想的[aɪˈ ...

  10. elementUI el-table渲染的时候出现bug

    如下: 问题: value的值一直渲染不出来,因为是boolean类型,出现了bug,把true变成一个字符串就能显示了,太不好用了 为了能渲染出来,不得不写成下列形式: