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

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

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

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const long long mod = 1e9+;
const int maxn = 5e5+;
const int inf = 1e9+;
int n,m,a,b,nm,qwq;
int head[maxn];
ll dis[maxn];
struct node{
int to,nxt;
}edg[maxn*];
void add(int x,int y){
edg[++nm].to = y;
edg[nm].nxt = head[x];
head[x]=nm;
if(x==&&y==n)qwq=;
}
queue<int> p,q;
int f[maxn],dep[maxn];
void solve(){
dis[]=;
int i,j,x,y;
p.push();
for(i=;i<=n;i++){
q.push(i);
}
for(i=;i<=n;i++){
f[i]=;dep[i]=;
}
while(!p.empty()){
if(q.empty())break;
x = p.front();
p.pop();
for(i=head[x];i;i=edg[i].nxt)f[edg[i].to]=x;
j = dep[q.front()];
while(!q.empty()){
y = q.front();
if(dep[y]!=j)break;
q.pop();
dep[y]=dep[y]+;
if(f[y]==x)q.push(y);
else{
p.push(y);
dis[y]=dis[x]+b;
}
}
}
while(!p.empty())p.pop();
while(!q.empty())q.pop();
if(dis[n]==-||dis[n]>a)printf("%d\n",a);
else printf("%lld\n",dis[n]);
} void dist(){
int i,j,x,y;
dis[]=;
p.push();
while(!p.empty()){
x = p.front();
p.pop();
for(i=head[x];i;i=edg[i].nxt){
y = edg[i].to;
if(dis[y]!=-)continue;
dis[y]=dis[x]+a;
p.push(y);
}
}
if(dis[n]==-||dis[n]>b)printf("%d\n",b);
else printf("%lld\n",dis[n]);
}
int main()
{
while(scanf("%d%d%d%d",&n,&m,&a,&b)==){
qwq=;
nm = ;
int i,j,x,y;
for(i=;i<=n;i++){
head[i]=;
dis[i]=-;
}
for(i=;i<=m;i++){
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
if(a>=b){
if(qwq==){
printf("%d\n",b);
}
else solve();
}
else{
if(qwq==){
printf("%d\n",a);
}
else dist();
}
}
}

最新文章

  1. [PHP源码阅读]strtolower和strtoupper函数
  2. How to debug .NET Core RC2 app with Visual Studio Code on Windows?
  3. Linux 常用工具小结:(5) lftp工具使用
  4. Spring整合Hibernate。。。。
  5. iOS:访问地址薄
  6. ubuntu源码安装django
  7. php 滑动验证码
  8. 【转载】alter table move 和 alter table shrink space的区别
  9. 济南学习 Day 4 T1 pm
  10. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐
  11. asp.net验证控件注意事项
  12. C#基础:事件(一) 【转】
  13. hdu3062(two-sat)
  14. JavaSE教程-04Java中循环语句for,while,do&#183;&#183;&#183;while-练习2
  15. 模板方法模式和JDBCTemplate(一)
  16. json格式 (JavaScipt Object Notation)
  17. Pandas的一些简单函数总结
  18. 使HTML5支持RTSP流 微信直播RTSP流 微信播放RTSP直播流(HTML5播放rtsp,web播放rtsp,微信支持rtsp)
  19. Java精选笔记_面向对象(多态、异常)
  20. 《DSP using MATLAB》示例 Example 9.4

热门文章

  1. DP————最小覆盖问题
  2. 【Web网站服务器开发】apache和tomcat 阿帕奇和汤姆猫
  3. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
  4. 使用sequelize-auto生成sequelize的Models
  5. 【Python】【demo实验21】【练习实例】【求球反弹高度】
  6. 【Python】【demo实验18】【练习实例】【统计输入字符串中,数字的个数、英文字母的个数及其他符号的个数】
  7. 【转】nosql的分类
  8. ubuntu 设置静态ip,但显示scope global secondary ens33
  9. Hadoop集群搭建-03编译安装hadoop
  10. Update语句的Output从句结构