luogu P1608 路径统计
题目描述
“RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为“1”的小镇上,而送餐的地点在标注为“N”的小镇。(有点废话)除此之外还知道这些道路都是单向的,从小镇I到J需要花费D[I,J]的时间,为了更高效快捷的将快餐送到顾客手中,
他们想走一条从小镇1到小镇N花费最少的一条路,但是他们临出发前,撞到因为在路上堵车而生气的FYY,深受启发,不能仅知道一条路线,万一。。。,于是,他们邀请FYY一起来研究起了下一个问题:这个最少花费的路径有多少条?
输入输出格式
输入格式:
输入文件第一行为两个空格隔开的数N,E,表示这张地图里有多少个小镇及有多少边的信息。
下面E行,每行三个数I、J、C,表示从I小镇到J小镇有道路相连且花费为C.(注意,数据提供的边信息可能会重复,不过保证I<>J,1<=I,J<=n)。
输出格式:
输出文件包含两个数,分别是最少花费和花费最少的路径的总数.
两个不同的最短路方案要求:路径长度相同(均为最短路长度)且至少有一条边不重合。
若城市N无法到达则只输出一个(‘No answer’);
输入输出样例
5 4
1 5 4
1 2 2
2 5 2
4 1 1
4 2
说明
对于30%的数据 N<=20;
对于100%的数据 1<=N<=2000,0<=E<=N*(N-1), 1<=C<=10.
数据有重复,注意判重
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N = ;
int head[N];
struct node{
int v,w,next;
}edge[N*N/];
int n,e,num=,dis[N];bool vis[N];
void add_edge(int x,int y,int z)
{
edge[++num].v=y;edge[num].w=z;edge[num].next=head[x];head[x]=num;
}
int ans1,cnt[N];
int minn=;
void spfa(int x)
{
queue<int>que;
vis[]=;dis[]=;cnt[]=;
que.push();
while(!que.empty())
{
int u=que.front();que.pop();
if(u==n)continue;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].v;
if(dis[u]+edge[i].w<dis[v])
{
if(dis[u]+edge[i].w<dis[v])
{
dis[v]=dis[x]+edge[i].w;
cnt[v]=cnt[u];
}
if(!vis[v])que.push(v),vis[v]=;
}
else if(dis[u]+edge[i].w==dis[v]) cnt[v]+=cnt[u];
}
vis[u]=;cnt[u]=;
}
}
int main()
{
memset(dis,0x3f,sizeof dis);
scanf("%d%d",&n,&e);
int a,b,c;
for(int i=;i<=e;i++)
{
scanf("%d%d%d",&a,&b,&c);
add_edge(a,b,c);
}
spfa();
if(dis[n]==0x3f3f3f3f)
puts("No Answer");
else printf("%d %d\n",dis[n],cnt[n]);
return ;
}
luogu P1608 路径统计的更多相关文章
- 【luogu P1608 路径统计】 题解
题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...
- Luogu P1608 路径统计 最短路计数
颓了...重边导致我乖乖用邻接矩阵.... 好吧就是个最短路计数....如果更新时d[v]==d[u]+w[i],就可以接起来,把两个加在一起.. 如果d[v]>d[u]+w[i],那么c[v] ...
- 洛谷——P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- luogu 1608 路径统计--最短路计数
https://www.luogu.org/problemnew/show/P1608 题意https://www.cnblogs.com/rmy020718/p/9440588.html相似,建议还 ...
- P1608 路径统计
题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...
- 洛谷P1608路径统计
题目 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题. 可以反向搜索用A*的方法来通过,但是这个题的去重十分的恶心,需要一些玄 ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- 某模拟赛C题 树上路径统计 (点分治)
题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的 ...
随机推荐
- 9 RESTful API
1 RESTful API 2 post创建一个视频 put帖子加精,delete删除 3 自定义状态码 4 5 6 7 8
- Python虚拟机类机制之自定义class(四)
用户自定义class 在本章中,我们将研究对用户自定义class的剖析,在demo1.py中,我们将研究单个class的实现,所以在这里并没有关于继承及多态的讨论.然而在demo1.py中,我们看到了 ...
- windows服务自动备份数据库
最近写了几个windows服务用于自动备份与删除数据: services代码如下: public partial class Service1 : ServiceBase { public Servi ...
- 【Remove Nth Node From End of List】cpp
题目: Given a linked list, remove the nth node from the end of list and return its head. For example, ...
- web自动化测试:watir+minitest(一)
基本介绍: 本课程的测试环境和工具为:win7+ruby+watir+minitest Watir 全称是"Web Application Testing in Ruby".它是一 ...
- sql server 韩文查询匹配失败
在SQL Server 中查询韩文信息时,没有匹配到对应的信息,检查程序后发现字段类型是nvarchar类型的没有问题, 打开存储过程后找到问题了:原来是拼接后的查询语句存储在一个varchar变量中 ...
- hibernate运行常见错误
错误一: Exception in thread "main" org.hibernate.MappingException: Could not determine type f ...
- A.Equals(B)和A==B的区别
Equals 和 == 都是用于比较. 如果a和b都是值类型,则a.Equals(b) 和 a == b 结果相同,但是在引用类型是它们的行为是不同的: string a = new string(n ...
- Codeforeces 954C Matrix Walk
题目大意 考虑一个 $x\times y$ 的矩阵 $A_{x\times y}$ ,$A_{i,j} = (i-1)x+y$ . 从矩阵中的某个位置出发,每次可向上下左右移动一步,每到一个位置,记录 ...
- 无序字母对 character
无序字母对 character 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入 ...