给你一个一共由两种边的完全图 要求你求1到N的最短路

q队列为前沿队列(已探索过且最外围的点)  p队列为未探索队列(未探索过的点)

depth这个数组的用法并不是代表实际上这个点在第几层 而是防止死循环 保证每次通过前沿的一个点都只会遍历p中每个点一次

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const long long mod = 1e9+;
  5. const int maxn = 5e5+;
  6. const int inf = 1e9+;
  7. int n,m,a,b,nm,qwq;
  8. int head[maxn];
  9. ll dis[maxn];
  10. struct node{
  11. int to,nxt;
  12. }edg[maxn*];
  13. void add(int x,int y){
  14. edg[++nm].to = y;
  15. edg[nm].nxt = head[x];
  16. head[x]=nm;
  17. if(x==&&y==n)qwq=;
  18. }
  19. queue<int> p,q;
  20. int f[maxn],dep[maxn];
  21. void solve(){
  22. dis[]=;
  23. int i,j,x,y;
  24. p.push();
  25. for(i=;i<=n;i++){
  26. q.push(i);
  27. }
  28. for(i=;i<=n;i++){
  29. f[i]=;dep[i]=;
  30. }
  31. while(!p.empty()){
  32. if(q.empty())break;
  33. x = p.front();
  34. p.pop();
  35. for(i=head[x];i;i=edg[i].nxt)f[edg[i].to]=x;
  36. j = dep[q.front()];
  37. while(!q.empty()){
  38. y = q.front();
  39. if(dep[y]!=j)break;
  40. q.pop();
  41. dep[y]=dep[y]+;
  42. if(f[y]==x)q.push(y);
  43. else{
  44. p.push(y);
  45. dis[y]=dis[x]+b;
  46. }
  47. }
  48. }
  49. while(!p.empty())p.pop();
  50. while(!q.empty())q.pop();
  51. if(dis[n]==-||dis[n]>a)printf("%d\n",a);
  52. else printf("%lld\n",dis[n]);
  53. }
  54.  
  55. void dist(){
  56. int i,j,x,y;
  57. dis[]=;
  58. p.push();
  59. while(!p.empty()){
  60. x = p.front();
  61. p.pop();
  62. for(i=head[x];i;i=edg[i].nxt){
  63. y = edg[i].to;
  64. if(dis[y]!=-)continue;
  65. dis[y]=dis[x]+a;
  66. p.push(y);
  67. }
  68. }
  69. if(dis[n]==-||dis[n]>b)printf("%d\n",b);
  70. else printf("%lld\n",dis[n]);
  71. }
  72. int main()
  73. {
  74. while(scanf("%d%d%d%d",&n,&m,&a,&b)==){
  75. qwq=;
  76. nm = ;
  77. int i,j,x,y;
  78. for(i=;i<=n;i++){
  79. head[i]=;
  80. dis[i]=-;
  81. }
  82. for(i=;i<=m;i++){
  83. scanf("%d%d",&x,&y);
  84. add(x,y);
  85. add(y,x);
  86. }
  87. if(a>=b){
  88. if(qwq==){
  89. printf("%d\n",b);
  90. }
  91. else solve();
  92. }
  93. else{
  94. if(qwq==){
  95. printf("%d\n",a);
  96. }
  97. else dist();
  98. }
  99. }
  100. }

第十五届四川省省赛 SCU - 4444 Travel的更多相关文章

  1. 第十五届四川省省赛 SCU - 4443 Range Query

    先给你1~N的N个数 再给你每种最多50个的条件(ai,bi,ci) 或者[ai,bi,ci] (ai,bi,ci)表示下标ai到bi的最小值必为ci [ai,bi,ci]表示下标ai到bi的最大值必 ...

  2. 第十五届四川省省赛 SCU - 4439 Vertex Cover

    给你一个一般图 保证每条边的一端下标不大于30 问最小覆盖集的大小为多少 爆搜:枚举前30个点是否在覆盖集内 剪枝1:如果不在的话 那么他所连的下标大于30的点都必须选 剪纸2:最优解剪枝 #incl ...

  3. Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again

    Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again https://ac.nowcoder.com/acm/contest/700/I 时间限制:C/C++ 1 ...

  4. 北京师范大学第十五届ACM决赛-重现赛 B Borrow Classroom (树 ——LCA )

    链接:https://ac.nowcoder.com/acm/contest/3/B 来源:牛客网 Borrow Classroom 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 2 ...

  5. Minieye杯第十五届华中科技大学程序设计邀请赛网络赛D Grid(简单构造)

    链接:https://ac.nowcoder.com/acm/contest/560/D来源:牛客网 题目描述 Give you a rectangular gird which is h cells ...

  6. H-Modify Minieye杯第十五届华中科技大学程序设计邀请赛现场赛

    题面见 https://ac.nowcoder.com/acm/contest/700#question 题目大意是有n个单词,有k条替换规则(单向替换),每个单词会有一个元音度(单词里元音的个数)和 ...

  7. Minieye杯第十五届华中科技大学程序设计邀请赛网络赛 部分题目

    链接:https://pan.baidu.com/s/12gSzPHEgSNbT5Dl2QqDNpA 提取码:fw39 复制这段内容后打开百度网盘手机App,操作更方便哦 D    Grid #inc ...

  8. 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝

    Problem B 迷宫寻宝 Accept: 52    Submit: 183Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem De ...

  9. 第十五届浙江省赛 F Now Loading!!!

    Now Loading!!! Time Limit: 1 Second      Memory Limit: 131072 KB DreamGrid has  integers . DreamGrid ...

随机推荐

  1. linux 系统函数 basename和dirname

    在linux系统中有这样两个系统函数,basename 和  dirname 1.basename 用于 获取文件名, 1.1 当给定扩展名作为参数之后,甚至可以直接获取文件名 2.与basename ...

  2. [机器学习理论] 降维算法PCA、SVD(部分内容,有待更新)

    几个概念 正交矩阵 在矩阵论中,正交矩阵(orthogonal matrix)是一个方块矩阵,其元素为实数,而且行向量与列向量皆为正交的单位向量,使得该矩阵的转置矩阵为其逆矩阵:  其中,为单位矩阵. ...

  3. Linux文件权限基础知识

    一.文件权限概述 Linux中每个文件或目录都有一组一组9个基础权限位,每三位字符被分为一组,他们分别是属主权限位(占三个字符).用户组权限位(占三个字符).其他用户权限位(占三个字符).比如rwxr ...

  4. 精通Java中的volatile关键字

    在一些开源的框架的源码当中时不时都可以看到volatile这个关键字,最近特意学习一下volatile关键字的使用方法. 很多资料中是这样介绍volatile关键字的: volatile是轻量级的sy ...

  5. [转帖]字符编码笔记:ASCII,Unicode 和 UTF-8

    字符编码笔记:ASCII,Unicode 和 UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 转帖 ...

  6. 小菜鸟之servlet

    # Servlet课程-1和2和3 容 Web项目 项目代码部署在服务器上, 一般分为c\s(客户端\服务器端)和b\s(浏览器/服务器) 服务器 常用的服务器(tomcat服务器) tomcat的目 ...

  7. 小记--------spark的Master主备切换机制原理分析及源码分析

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABfEAAAJwCAYAAAAp7ysfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw

  8. 使用django连接数据库 对数据库 增删改查

    如果路由访问的时候出现 就把项目中的注释掉 登录功能 1 路由访问如果不加斜杠 会内部自动重定向加斜杠的路由 所有的静态文件(css,js,前端第三方类库)默认都放在static文件下 #静态文件配置 ...

  9. python 高阶函数 lamdad reduce map

    ## def use_filer(l):## # 过滤偶数# rest = filter(lambda n: n % 2 != 0, l)# return rest## if __name__ == ...

  10. pandas字符串与时间序列的处理 str 与 dt

    一.str属性 pandas里的Series有一个str属性,通个这个属性可以调用一些对字符串处理的通用函数, 如:df['road'].str.contains('康庄大道')  会返回字符串里包含 ...