热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

P1144最短路计数·BFS/dijkstra

题解其实题目很简单不写了,这里总结一下从这道题目里学到的知识:当最短路的边权都是1时,dijkstraspfa就是BFS如果使用优先队列,内部结构是pair时

题解

其实题目很简单不写了,这里总结一下从这道题目里学到的知识:



  1. 当最短路的边权都是1时,dijkstra/spfa 就是 BFS

  2. 如果使用优先队列,内部结构是pair时,dis[v]=dis[u]+1使得当前路成为新的最短路,这条路在优先队列里的级别变高,应该使用q.push(make_pair{-dis[v],v}),有负号哦!



在这里插入图片描述



BFS版:


dijkstra版:

#include
using namespace std;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int mod=100003;
const int N=1e6+10;
vector<int>g[N];
int vis[N],dis[N];
int ans[N];
int n,m;
priority_queue< pii >q;
void dijkstra(){memset(dis, INF, sizeof dis);dis[1]=0;ans[1]=1;q.push({0,1});while(q.size()){int u=q.top().second;q.pop();if(vis[u])continue;vis[u]=1;for (int i = 0; i <g[u].size(); i++) {int v=g[u][i];if(dis[v]>dis[u]+1){dis[v]=dis[u]+1;ans[v]=ans[u];q.push({-dis[v],v});//更新之后的点是新的最短路 优先级别变高 应该跑到队列最前方 用-dis[v]控制//dis[v]的值是没有变 仍然是正的}else if( dis[v]==dis[u]+1){ans[v]=(ans[v]+ans[u])%mod;}}}
}
int main()
{cin>>n>>m;for (int i = 1,u,v; i <= m; i++) {cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dijkstra();for (int i = 1; i <=n ; i++) {cout<<ans[i]<<endl;}return 0;
}

推荐阅读
  • 题目链接Reference:https:www.cnblogs.comdiltheyp9757781.html首先容易想到的常规dp是,初始化dp(i,j)0dp(i,j)0dp( ... [详细]
  • 883.三维形体投影面积
    题目883.三维形体投影面积题目大意在nxn的网格grid中,我们放置了一些与x,y,z三轴对齐的1x1x1立方体。每个值vgri ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • The“travellingsalesmanproblem”asksthefollowingquestion:“Givenalistofcitiesandthedistancesb ... [详细]
  • 1、概念共享内存:共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同malloc()函数向不同进程返回了指向同一个 ... [详细]
  • 1.trigraph三字符组据说是为了照顾旧式键盘,还是为了键盘坏了,或者是使用非ASCII字符编码的语言输入方便,设计了一些三元字符组& ... [详细]
  • 【go密码学】对称加密算法
    对称加密对称加密算法是相对于非对称加密算法而言,两者的区别在于,对称加密和加密和解密时使用相同的秘钥,而非对称加密在加密和解密时使用不同的秘钥(公钥和私钥)。常见的对称加密算法:D ... [详细]
  • 【链接】我是链接,点我呀:)【题意】在这里输入题意【题解】栈模拟一下就好。每个输出段后面都有一个空行。包括最后一个.【代码】#include< ... [详细]
  • 序本文主要研究一下nacosServiceManager的removeInstanceServiceManagernacos-1.1.3namingsrcmainjavacomal ... [详细]
  • 一、ImageRequest不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、Json ... [详细]
  • 使用ffmpeg进行视频格式转换的简单例子2006-12-1623:12主要参考FFMPEG里面的apiexample.c以及output_example.c编写intmain(in ... [详细]
  • 一、腐烂的橘子1、题目描 ... [详细]
  • 自定义_自定义AXIIP核(转)
    本文由编程笔记#小编为大家整理,主要介绍了自定义AXI-IP核(转)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • B题:题意:博弈,二维平面上n个点,每次可以下移,左移或对角线移动任意步,将任意点移到原点即胜 ... [详细]
author-avatar
sex丶帆布鞋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有