洛谷P1608 路径计数
题目简介
题目描述
给你一个N点M边的有向图,求第一个点到第n个点的最短路和最短路条数
题目分析
很明显直接Dijkstra求最短路,加一个最短路计数
如下:
if(dis[y]>dis[x]+edge[i].w){
dis[y]=dis[x]+edge[i].w;
ans[y]=ans[x];
}
else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];
记住要删除重边,要不然计数会重复
上代码
#include<bits/stdc++.h>
#define re register
#define ll long long
using namespace std;
inline int read()
{
ll k=1,sum=0;
char c=getchar();
for(;c<'0' || c>'9';c=getchar()) if(c=='-') k=-1;
for(;c>='0' && c<='9';c=getchar()) sum=sum*10+c-'0';
return sum*k;
}
const int N=2e3+10,E=4e6+10;
int n,e;
struct Edge{
int to,nxt,w;
};
Edge edge[E<<1];
const int MOD=100003;
int head[N],cnt;
int dep[N];
int dis[N],ans[N];
bool vis[N];
int awsl[N][N];
struct New{
int x,d;
bool operator<(const New& qwq) const{
return d>qwq.d;
}
};
priority_queue<New> Q;
inline void Add(int x,int y,int w){
edge[++cnt].to=y;
edge[cnt].nxt=head[x];
edge[cnt].w=w;
head[x]=cnt;
}
inline void Dijkstra(){
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[1]=0;ans[1]=1;
Q.push((New){1,0});
while(!Q.empty()){
New fr=Q.top();Q.pop();
int x=fr.x;
if(vis[x]) continue;
vis[x]=1;
for(re int i=head[x];i;i=edge[i].nxt){
int y=edge[i].to;
if(dis[y]>dis[x]+edge[i].w){
dis[y]=dis[x]+edge[i].w;
ans[y]=ans[x];
Q.push((New){y,dis[y]});
}
else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];
}
}
}
int main()
{
n=read();e=read();
for(re int i=1;i<=e;++i){
int x=read(),y=read(),w=read();
if(!awsl[x][y] || awsl[x][y]>w){
Add(x,y,w);awsl[x][y]=w;
}
}
Dijkstra();
if(ans[n]==0) cout<<"No answer";
else cout<<dis[n]<<" "<<ans[n];
return 0;
}
洛谷P1608 路径计数的更多相关文章
- 洛谷——P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷——P1176 路径计数2
P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...
- 洛谷 P1176 路径计数2
P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...
- 洛谷P1608路径统计
题目 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题. 可以反向搜索用A*的方法来通过,但是这个题的去重十分的恶心,需要一些玄 ...
- 洛谷P1144-最短路计数-最短路变形
洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...
- 洛谷 [P1608] 最短路计数
最短路计数模版 本题要注意重边的处理 #include <iostream> #include <cstdio> #include <algorithm> #inc ...
- 洛谷——P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
- 洛谷 P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
随机推荐
- [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问
BTC钱包对接流程 一. 部署BTC钱包节点 二. 分析BTC钱包的API 三. 通过JSON-RPC访问BTC钱包API 四. 部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...
- Nginx总结(六)nginx实现负载均衡
前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要 ...
- Android Q 正式命名为 Android 10
根据官方博文,谷歌已经公布了 Android Q 的名称,它并不是想以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10. 该公司表示,它正在改变其发布版本的 ...
- 每个Java开发人员都应该知道的10个基本工具
大家好,我们已经在2019年的第9个月,我相信你们所有人已经在2019年学到了什么,以及如何实现这些目标.我一直在写一系列文章,为你提供一些关于你可以学习和改进的想法,以便在2019年成为一个更好的. ...
- JAVA截取后String字符串六位字符
public static void main(String[] args){ String cellphone="; String pwd = cellphone.substring(ce ...
- [LeetCode] 由 “中缀表达式 --> 后缀表达式" 所想
如何利用栈解决问题. Ref: 如何在程序中将中缀表达式转换为后缀表达式? 本文的引申:如何手写语法分析器 实现调度场算法 “9+(3-1)*3+10/2” --> “9 3 1-3*+ 10 ...
- PHP的跨域问题
服务端的代码 public function test(){ header("Access-Control-Allow-Origin: http://cnblogs.com"); ...
- Player的跟踪狂 -- Camera
P.S.很多游戏里的Player都会设置的被跟踪,是人性的扭曲,还是XXX,正在解密. 第三人称视角 camera紧跟player背后(角度随player改变) using System.Collec ...
- layui-table与layui-rate评分转换成星级的使用
需求:将layui-table中的某一列,例如:评分,从数据库中查找出来之后,进行layui-rate评分转换显示效果,为星星.显示效果如下: 实现代码: 1.layui中引入rate 2.table ...
- Java 多线程练习
题目:某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程, 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码.线 ...