https://www.luogu.org/problemnew/show/P1608

题意https://www.cnblogs.com/rmy020718/p/9440588.html相似,建议还没做的先去做一下。

当你看完上一题,就已经对最短路计数大体有一个思想了,但是本题中没有说不保证没有重边和自环,那么开一个map数组记录一下就好了,自环的话我使用spfa解决的,那么我们就可以按部就班的写最短路计数了。

不过有个bug源自于spfa算法,见下图。

当你按spfa的手动模拟的时候你会发现到达5号点的路径有3条,但是其真实路径只有两条,我们应该在处理完每一个点后将这个点的路径数量清零(在其更新完其他点以后),避免二次计算的时候再次累加。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;
int i,j,m,n;
int head[];
int us[];
int t[];
int dis[];
int a[][];
queue<int>q; int r()
{
int aans=;
char ch=getchar();
while(ch<''||ch>'')
ch=getchar();
while(ch>=''&&ch<='')
{
aans*=;
aans+=ch-'';
ch=getchar();
}
return aans;
} int spfa(int x)
{
q.push(x);dis[x]=;t[x]=;
while(!q.empty())
{
int x=q.front();
q.pop();
us[x]=;
if(x==n)
continue;
for(i=;i<=n;i++)
{
if(dis[x]+a[x][i]==dis[i])
t[i]+=t[x];
if(dis[x]+a[x][i]<dis[i])
{
dis[i]=dis[x]+a[x][i];
t[i]=t[x];
}
if(t[i]&&!us[i])
us[i]=,q.push(i);
}
t[x]=;
} } int main()
{
n=r(),m=r();
int x,y,z;
memset(a,,sizeof(a));
memset(dis,,sizeof(dis)); for(i=;i<=m;i++)
{
x=r(),y=r(),z=r();
if(a[x][y])a[x][y]=min(z,a[x][y]);
else a[x][y]=z;
}
spfa();
if(dis[n]!=a[][])cout<<dis[n]<<" "<<t[n]<<endl;
else cout<<"No answer"<<endl;
return ;
}

luogu 1608 路径统计--最短路计数的更多相关文章

  1. Luogu P1608 路径统计 最短路计数

    颓了...重边导致我乖乖用邻接矩阵.... 好吧就是个最短路计数....如果更新时d[v]==d[u]+w[i],就可以接起来,把两个加在一起.. 如果d[v]>d[u]+w[i],那么c[v] ...

  2. 【luogu P1608 路径统计】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...

  3. luogu【P1144】最短路计数

    原题入口 这道题 一道有关于最短路的图论问题. 要求从1开始求解最短路的条数. 这个题十分有趣,首先,跑裸的spfa(或者dijkstra)算出从1开始的最短路的长度. 再其次,计数的话,可以用记忆化 ...

  4. luogu P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

  5. Luogu P1144 最短路计数 【最短路】 By cellur925

    题目传送门 常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤). 另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了. 水题被卡了三次(嘤嘤嘤 ...

  6. 拼题 L2-001 紧急救援 最短路计数+记录路径

    https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 L2-001 紧急救援 (25 分)   作 ...

  7. 解题报告:luogu P1144 最短路计数

    题目链接:P1144 最短路计数 很简单的一道\(dfs\),然而我又跑了一遍\(dij\)和排序,时间复杂度是\(O(nlog n)\) 注意:\(1\).搜索时向\(dis[j]=dis[cur] ...

  8. [JSOI2007]重要的城市 floyd:最短路计数

    ---题面--- 题解: 其实感觉还是比较妙的,第一眼看题想到floyd统计最短路条数, 注意到对于任意两点x,y而言,floyd将会枚举其最短路所可能经过的所有中转点, 因此我们可以直接分别统计对于 ...

  9. 洛谷——P1144 最短路计数

    P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...

随机推荐

  1. Luogu P2114[NOI2014]起床困难综合症 【贪心/位运算】By cellur925

    题目传送门 所以NOI的题现在简单惹? 30分做法:枚举开始的权值,n²过掉. 100分做法:竟然是贪心qwq.因为我们的计算背景是二进制下,所以我们贪心地想让每一位都是1.我们现在需要解决的问题,就 ...

  2. (五)SpringBoot如何定义全局异常

    一:添加业务类异常 创建ServiceException package com.example.demo.core.ret; import java.io.Serializable; /** * @ ...

  3. Python while 1 和 while True 速度比较

    References http://legacy.python.org/dev/peps/pep-0285/http://stackoverflow.com/questions/3815359/whi ...

  4. 模拟 HDOJ 5099 Comparison of Android versions

    题目传送门 /* 题意:比较型号的大小 模拟:坑点在长度可能为5,此时设为'A' */ #include <cstdio> #include <algorithm> #incl ...

  5. 题解报告:hdu 1520 Anniversary party(树形dp入门)

    Problem Description There is going to be a party to celebrate the 80-th Anniversary of the Ural Stat ...

  6. iphone 开发Categories 、Extensions 区别 --转

    Category和Extension这两个概念,即便对于Java程序员,可能也会感到陌生.这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法 ...

  7. 万能makefile模板

    这里一份万能makefile模板,写opencv项目时候使用的. 前提是提前配置好 包管理工具 pkg 然后就不用每次都去 -lopencv_xxx了. ####################### ...

  8. 字符串、数组、json

    一.字符串 string 1.字符串的定义: (1).var s="haha"; (2).var s=new string ("hello") 对象形式定义 2 ...

  9. postgresql版sde(10.4.1)新建数据库

    使用sde pg版,第一次建sde库就是新安装sde的方法 然而从第二次开始可以有其他方式 新建一般的pg数据再转为sde数据库: 首先用建一般的pg数据库 首先要新建数据库 数据库名:新建的数据库名 ...

  10. 如何解决MySQL在高版本需要指明是否进行SSL连接问题

    WARN: Establishing SSL connection without server's identity verification is not recommended. Accordi ...